注目のストーリー
すべてのストーリー
ボタンタップ時に発生する不具合の対策について【株式会社ライトコード】
はじめに今回は、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 → 設定 → 承認済みドメインを選択自分のアプリのドメ...
SwiftDataとは?【株式会社ライトコード】
SwiftData とは?SwiftDataは、データモデリングと管理のためのフレームワークです。Swiftの新しいマクロシステムを活用し、シームレスなAPI体験を提供します。また、SwiftUIと統合され、ウィジェットなどの他のプラットフォーム機能と連携して動作します。SwiftDataの主要機能@ModelマクロSwiftDataの中心的な機能の一つが、@Modelマクロです。このマクロを使用することで、Swiftコードから直接モデルのスキーマを定義できます。SwiftDataのスキーマは通常のSwiftコードですが、必要に応じてプロパティに追加のメタデータを注釈することもできます。...
Unreal Engine 5に入門してみた【株式会社ライトコード】
はじめに以前からUnreal Engineに興味があり、これを使ってゲームを作ってみたいと考えておりました。また、大規模アップデートのUnreal Engine 5が登場してからしばらく経ち、情報も集まってきたので、「入門するなら今だ!」と思い、この記事を執筆させていただきました。今回は、Unreal Engine 5を実際に触ってみて、個人的に気に入った点を中心に紹介しようと思います。Unreal Engineとは?Unreal Engineとは、Unityのようなゲームエンジンの1つで、非常にリアルなグラフィックのゲームを作ることができます。非常に美麗なグラフィックスを、しかもゲーム...
APIから取得したデータをRealmに保存し取得してみた!【株式会社ライトコード】
はじめにこんにちは!今回はAPIから取得したデータをRealmに保存し、表示する流れをブログにまとめてみようと思います!業務でReactNativeを触っているのですが、webviewで表示されています。そのためローカルDBに保存されていないため機内モードにしたときなど通信接続ができなくなったときに何も表示されなくなります。研修で開発したAndroidアプリではRoomライブラリを使用していたのですが、ReactNativeでは何が使用されているのか気になったため今回調べてみました!ReactNativeで使用されるローカルDBについてReactNativeではSQLite、Realm、...
Dev Containerを導入してみました【株式会社ライトコード】
はじめにWebアプリケーション開発プロジェクトに参加する際、最初に取り組むことの一つが開発環境の構築です。開発環境を設定する過程ではよく、プロジェクトに必要な特定バージョンのPythonやRubyをインストールし、pipenv、poetry、bundlerなどのパッケージ管理ツールを設定し、依存するパッケージをインストールする手順を踏みます。この一連の作業は地味に手間がかかり、特に慣れてない言語やツールを使用する際には、環境構築だけで疲れてしまいます。また、アプリケーション以外にデータベースなども必要な場合が多く、これらをDocker Composeで管理すると便利です。しかし、この方法...