注目のストーリー
すべてのストーリー
【Android】GitHub ActionsからワンクリックでFirebase App Distributionにアプリをデプロイする【株式会社ライトコード】
前回は、GitHub Actionsを使ってAndroidアプリのバージョン番号(versionName と versionCode)を自動で更新し、プルリクエストを作成するワークフローについて解説しました。▼ 前回の記事(まだの方はこちらからどうぞ!)2025.02.07【Android】GitHub Actionsでアプリのバージョン情報を更新するはじめにこんにちは!株式会社ライトコードの福岡本社でモバイルエンジニアやってる こー です!現在、個人開発しているAn...開発中では、テスターやチームメンバーに対して動作確認用としてAPKファイルを配信することが多くあると思います。ですが...
Android Roomのパフォーマンス改善:Indexとクエリ最適化のポイント【株式会社ライトコード】
Android Roomのパフォーマンス改善をしようAndroidアプリ開発でデータを扱う際に、SQLiteを手軽に利用できるRoomはとても便利なライブラリですよね。便利な反面、アプリの利用が進みデータ量が増加すると、次のような状況に直面することがあります。「アプリの動作が少し遅く感じることがある…」「データ表示に時間がかかり、ユーザー体験に影響が出ているかもしれない…」これらの場合、データベースのパフォーマンスがボトルネックになっていること可能性があります。UIがどんなに優れていても、データの読み込みに時間がかかれば、アプリ全体の使い心地(UX)は低下してしまいます。今回は、この課題...
テストしやすいRailsコード【株式会社ライトコード】
はじめにRailsで開発を進めていてると、最初は快適だったのに機能が増えるに連れてテストが書きづらくなり、修正が怖くなるようなことはないでしょうか?この記事では、「テストしやすいRailsコード」とは何かを考えつつ、テストファーストの視点から設計を見直すためのヒントを紹介します。なぜ「テストしやすさ」が重要なのか?Railsは開発スピードに強みがありますが、適切な設計をしないと、テストが困難な肥大化したコードが生まれやすいという弱点もあります。一方でテストファーストという視点を持つと、以下のようなメリットがあります。自然と責務が明確なコードになるフレームワーク依存を避けやすくなるコードが...
【dbt × BigQuery】増分更新について挙動を詳しく確認してみる【insert_overwrite(Dynamic partitions), append】株式会社ライトコード
こんにちは!普段データ関連のお仕事をしています。現在所属しているチームではデータマートの作成の際にdbtを使用しており、コスト削減のために差分更新の対応中です。差分更新処理を書いていると「あれ?どんな挙動になるんだっけ?」ということが多いので、そんな自分に向けて増分更新の詳しい挙動を確認して、備忘録がてらブログを書いていきたいと思います。環境・準備BigQuerydbt差分更新の種類僕が所属しているチームでは「insert_overwrite(Dynamic partitions)」方式と「append」方式を採用しているので、今回はその2つについて挙動を見ていきたいと思います。inse...
ボタンタップ時に発生する不具合の対策について【株式会社ライトコード】
はじめに今回は、Unityにおけるボタンの連打・同時押し対策についてまとめました。業務でゲーム開発を進める中で、これらの対策を初めて実装する機会があり、多くの学びがあったので、これからUnityでゲームを開発される方の参考になれば幸いです!前提として、アーキテクチャにはMVPを採用し、ライブラリにはUniTaskおよびR3を使用しています。どんな不具合が起きたのか実際に発生した不具合は以下の2点です。- ボタンを連打した後、タップしても処理が実行されず、ゲームが進行不能になる- 複数のボタンを同時にタップした際、それぞれの処理が並行して実行され、想定外の挙動になるいずれも致命的な問題です...
Koltin Coroutines withContextを使っているとStackTraceを用いた不具合調査が辛いのをどうにかしたい【株式会社ライトコード】
はじめにAndroidの非同期処理でKoltin Coroutinesを用いた実装を数年続けてきたことで非同期処理を最適化するためにwithContextを積極的に使うことを意識して実装するようになりました。withContextによるスレッドの切り替えはオーバーヘッドも少なく、気軽に使うことができるのが魅力の一つです。しかし、withContextを積極的に使った実装をするようになったことでStackTraceを用いた不具合調査がしづらくなってしまいました。「不具合調査が辛い」とはどういうことか端的に言うと。withContextを使うと「StackTraceが破壊され処理の呼び出し元...
Pythonのパッケージ管理ツール「uv」を試してみた【株式会社ライトコード】
概要Pythonのパッケージ管理ツールuvを使ってみたので、使い心地をざっくり書いてみます。記事の要約趣味プロジェクトのパッケージ管理ツールをuvへ移行させた使ってみたらとても便利だったので、普段の開発ユースケースでどう運用するのが良さそうか整理したいuvはいいぞ環境Python: 3.13.2uv: 0.7.8背景もとい前置きPythonは主に趣味で触っていましたが、パッケージ管理で苦戦することが多かったです。Dockerを使うとIDEと噛み合わせが悪かったり、いろんなツールを試すと仮想環境とパッケージ管理が複雑になってきてメンテナンスが大変になったりと、色々迷走してきました。Pyth...
【GAS】Google App Scriptのタイムアウトエラーを回避する方法【株式会社ライトコード】
はじめにGoogle Apps Script (GAS) を使った自動化は非常に便利だが、タイムアウトエラーに直面したことはないだろうか?GASのスクリプトが連続して実行できる時間が無料版で最大6分、有料のGoogle Workspaceプランでも30分に設定されているために発生する。スプレッドシートに書き込む処理が時間がかかるため、getValue, setValueを減らし、getValues, setValues を使いまとめて処理することが速くすることができる。しかしながら、大量のデータ操作を行うスクリプトを開発していると、コードによる高速化にも限度があり、このタイムアウトエラー...
【ReactNative】Reduxで状態管理【株式会社ライトコード】
はじめにReact Native のアプリ開発で状態管理に Redux を使用しています。今回は、Redux の導入と基本的な使い方について備忘録としてまとめました。Redux とはRedux は、グローバルな状態管理のための JavaScript ライブラリです。主に React と ReactNative の状態管理に使用されます。React の状態管理方法としては他にも様々な選択肢がありますが、React に関する年次開発者調査を行っている Devographics の 2024 年調査によると、React の状態管理には useState に次いで Redux(Redux Too...
ECS サイドカーで特定ログを CloudWatch に分離出力する方法【株式会社ライトコード】
はじめに今回は AWS ECS において、アプリケーションの通常ログとは別に特定のログファイルを別の CloudWatch Logs グループ に出力する「サイドカー構成」について紹介します。ログの分離出力は、開発・運用時のトラブルシューティングやログ保守・可視化の観点で非常に有用です。今回は、Railsで外部サービスとの連携ログをexternal_service.logに出力し、これをサイドカーのFluent BitコンテナでCloudWatch Logsに送信する構成を作ってみました。サイドカーとは?どんな時に使う?サイドカーコンテナとは、メインのアプリケーションコンテナと一緒に E...
Next.js, TailwindCSSでscroll-behaviorを使い分ける【株式会社ライトコード】
はじめにスムーズスクロール対応のため、html要素にscroll-behavior: smooth;のclass(以下、TailwindCSSのscroll-smooth)を付与したい時があります。ただ、scroll-behavior: auto;を使いたいページを要求されたらどうするか心配になるものです。Next.js App routerNext.js App routerでは<html>タグをroot layoutで記述する必要がありますが、Route Groupsを使い複数のroot layoutをを用いることができます。app├── (scroll-auto)│ └── l...
Wantedlyのベスト100に選出!?Wantedly Awards 2024に潜入!【株式会社ライトコード】
Wantedlyさん、ありがとう!いきなりですが、「実は頑張ってました」シリーズ!実はライトコードでは…Wantedlyでの採用活動を頑張っていました!👏Wantedlyの週間PVランキングでは、ちょこちょこ10位以内に入ったりしていました。気付けば、早いもので5年ほど利用させていただいております。Wantedlyから月間50人以上の方にご応募いただいているので、採用活動にとって大きな戦力になっているといえるでしょう。そんなある日。突然の電話…トュルルルル…!はい!Wantedlyさん、いつもお世話になっております。えっ!?はい、担当者にお伝えしておきます。Wantedlyのご担当者さん...
社内の後輩エンジニア向けにワークショップを開いたら失敗した話【株式会社ライトコード】
社内の後輩エンジニア向けにワークショップを開いたら失敗した話をしますこんにちは、Androidエンジニアの江幡です。今回は直近で経験した良かれと思って勢いで計画したことの失敗談についてお話したいと思います。この話を通じて、少しでも皆さんの参考になれば幸いです。ワークショップを開くことになった経緯先日、社内の後輩モバイルエンジニア数人と雑談をしていた際、DI(DependencyInjection)の話題が出ました。雑談の時間では伝えきることができず、私の持っている知識をもっとしっかり後輩に伝えたほうが良いと感じたのがきっかけです。そして、手を動かしながら学ぶワークショップ形式なら、効果的...
Next.jsのParallel Routesを触ってみた【株式会社ライトコード】
はじめにこんにちは武田です。最近Next.jsに触れる機会があり色々調べていると、「Parallel Routes」という機能があり、面白いなと感じたので書かせていただきます。Parallell RoutesとはNext.js(App Router)のルーティング機能の1つで、フォルダ名に「@」を付けることでこのルーティングを利用することができます。この方法で作成されたセグメントは「スロット」と呼ばれ、ページに埋め込まれる部分を担うことになります。具体的には、スロットは親階層にあるレイアウトに組み込まれ、propsとして渡されるようになります。文字だけだとイメージしづらいので、以下を見て...
Next.jsでFirebase AuthenticationのSignInWithRedirectの実装時にハマったこととその解決策【株式会社ライトコード】
概要特定のブラウザー(例: Safari)ではSignInWithRedirectが正常に動作しない(ログインできない)その理由はサードパーティのストレージアクセスがブロックされているからです参考: Firebaseの公式ドキュメントアプリはFirebase Hostingを使っていないSignInWithPopupを使いたくない実装方法下記の設定・実装で、SignInWithRedirectでログインできることようになったので、そのやり方を紹介します。Firebase側の設定左側のメニューから構築 → Authentication → 設定 → 承認済みドメインを選択自分のアプリのドメ...