Docker 運用の Terraform に TFLint を導入する

エキサイト株式会社の@mthiroshiです。 運用している Terraform に TFLint を導入してみましたので、設定の方法や lint ルールの一例について紹介します。 TFLint とは TFLint は、Terraform の lintです。 github.com HashiCorp 非公式のサードパーティツー…

PHP アプリケーションの FCM HTTP v1 API 移行手順

エキサイト株式会社の@mthiroshiです。 アプリのプッシュ通知は、Firebase Cloud Messaging を用いて実装できます。サーバー環境から FCM 実装でプッシュ通知を送る方法の一つとして、FCM HTTP API があります。現在、FCM HTTP API は、新しいAPIへの移行の…

Excite × iXIT TechCon 2024 にてネイティブ実装アプリの Flutter 化事例について発表しました!

エキサイト株式会社の@mthiroshiです。 エキサイトHD主催の社内テックカンファレンス「Excite × iXIT TechCon 2024」にて、登壇発表をしました。 「Excite × iXIT TechCon 2024」の詳細については、下記記事をご参照ください。 tech.excite.co.jp iOS / Andr…

「potatotips #86 iOS/Android開発Tips共有会」に参加してきました!

エキサイト株式会社の@mthiroshiです。 potatotips #86 にてLT発表をしてきました。その内容をレポートします! potatotips #86 感想 採用情報 potatotips #86 potatotips は iOS / Android アプリ開発者向けの勉強会です。 potatotips.connpass.com #86 は …

【Flutter】wakelock_plus パッケージを使って画面スリープを無効にする

エキサイト株式会社の@mthiroshiです。 エキサイトホールディングス Advent Calendar 2023の13日目を担当します。 Flutter で画面スリープを無効にする(画面を常時点灯にする)wakelock_plus パッケージについて紹介します。 wakelock_plus とは wakelock_p…

iOS / Android ネイティブアプリから Flutter に移行するときに Pigeon を使ってデータマイグレーションする

エキサイト株式会社の@mthiroshiです。 エキサイトホールディングス Advent Calendar 2023の8日目を担当します。 エキサイトでは、 iOS / Android ネイティブアプリの Flutter によるリビルドを行ってきました。 ローカル DB でデータを管理するアプリの場合…

FlutterKaigi 2023 参加レポート

エキサイト株式会社の@mthiroshiです。 FlutterKaigi 2023に参加してきましたので、その内容をレポートします。 FlutterKaigi 2023の概要 聴講したセッション 基調講演「Flutter's 8 years journey」 「Flutter アプリにおけるテスト戦略の見直しと自動テス…

【Flutter】Androidの課金APIを操作する前に利用可能判定を行う【in_app_purchase】

エキサイト株式会社の@mthiroshiです。 Flutterのアプリ内課金の実装には、 in_app_purchase パッケージを使います。 Androidで実装する際に、少し躓いた問題があったのでご紹介します。 動作環境は、下記のpubspec.ymlの内容です。 dependencies: in_app_pu…

Dockerコンテナのログ出力設定を確認する

エキサイト株式会社の@mthiroshiです。 Dockerコンテナのログ出力設定について、調べた内容を紹介します。 Dockerコンテナのログ出力設定 Dockerコンテナのログについて、公式ドキュメントに詳細が記載されてあります。 docs.docker.jp docker logsコマンド…

terraform state mvでStateファイル(tfstate)のリソース状態をマージする

エキサイト株式会社の@mthiroshiです。 Terraformを運用していると、ディレクトリ構造を整理したいケースがあります。 コード上での変更は容易ですが、それだけではStateファイル(tfstate)に差分が生まれてしまい、予期しないリソースの削除を招く危険があり…

【Flutter】RawAutocomplete 実装の検索フォームにおける候補ワードを取得する際の状態管理

エキサイト株式会社の@mthiroshiです。 FlutterでRawAutocompleteを使って、テキストの入力に応じて検索候補のワードを表示する、検索フォームを実装してみました。検索候補ワードは、APIから取得します。 下記が公式ドキュメントです。公式ドキュメントには…

Google Analytics Data API for PHPを使う

PHP

エキサイト株式会社の武藤です。 GA3(ユニバーサルアナリティクス、UA)の終了が2023年7月1日となっており、いよいよ期日が迫ってきました。 引き続きGAを利用するためには、GA4への変更が必要になります。 私が担当しているサービスでは、バッチ処理をPHPで…

【Flutter】Widgetのフェードイン・アウトのアニメーションUIを作る

エキサイトの武藤です。 FlutterにおけるWidgetのフェードイン・アウトアニメーションUIについて簡単に紹介します。 Visibilityの表示・非表示の場合 AnimatedSwitcherを使ったフェードイン・アウトのアニメーションUI FadeTransitionを使ったフェードイン・…

「AWS移行を通して得られた知見や教訓」を発表しました

エキサイト株式会社の武藤です。 2023年2月17日(金)にエキサイトで第二回TechConが開催されました。 tech.excite.co.jp 私は「AWS移行を通して得られた知見と教訓」というタイトルで発表しました。 speakerdeck.com 発表の概要 2022年6月に E・レシピのAWS…

【Flutter】TextPainterでText Widgetのサイズを取得し、AnimatedContainerでアニメーションをつけたUIを実装する

エキサイト株式会社の武藤です。 FlutterでViewを構築するときに、Text Widgetのサイズが欲しいときがあります。今回は、Text WidgetのWidth、Heightの取得について紹介します。 また、求めたサイズを使ってアニメーションをつけたUIのサンプルを紹介します…

[Flutter] l10nの操作をRiverpodのProviderで行う

エキサイトの武藤です。 Flutterで多言語対応をする際、基本的にはWidget内でBuildContextからAppLocalizationsを呼び出して利用します。 しかし、複雑なロジックが必要な表示テキストの場合、Viewでそのロジックを書いてしまうとViewのコードが肥大化してし…

ShellCheckの警告を読んでみる

エキサイトの武藤です。 IntelliJ でシェルスクリプトを開くと、構文に警告を見かけることがあります。 IntelliJのシェルスクリプトの構文警告 SC2006 のリンクは下記のページに遷移します。 github.com ShellCheckは、シェルスクリプトの静的解析ツールです…

【Flutter】Rippleエフェクトを試す

エキサイトの武藤です。 FlutterのRippleエフェクトの挙動について紹介します。 Rippleの種類 ListViewのRipple表示 ListTile, 独自レイアウトの場合 Imageの上にTextを重ねたレイアウト まとめ 採用情報 参考記事 Rippleの種類 Button Widgetを例にRippleを…

ランキングのレガシーな設計をリビルド

エキサイトの武藤です。 エキサイトホールディングス Advent Calendar 2022の14日目の記事です。 https://qiita.com/advent-calendar/2022/excite-hd 担当しているサービスのランキング機能のリビルドを行いました。 実現するにあたって、考慮したところを紹…

【Flutter】freezed, json_annotation の基本的な使い方とTIPS

エキサイトの武藤です。 Flutter 開発を通して、freezed でのJSONの扱いに慣れてきました。 今回は freezed, json_annotation パッケージの基本的な使い方やTIPSをまとめていきます。 @JsonKey アノテーション name プロパティー defalutValue プロパティー …

GitHubの「Squash and merge」の使い所とは?

エキサイトの武藤です。 GitHubのプルリクエスト(PR)のマージ機能の一つである Squash and mergeの使い方と注意点について紹介します。 マージの種類 PRのマージには3つの種類があります。 Create a merge commit Squash and merge Rebase and merge デフ…

オンプレからマイグレーションした AWS EC2 のサーバ時刻同期に注意

エキサイトの武藤です。 オンプレ環境のサーバをAWS EC2へ移行する際に、サーバ時刻の同期について注意点があります。 サーバ時刻を扱うアプリケーション アプリケーションによっては、サーバ時刻をアプリケーションの実装に利用するケースがあります。 例え…

FirebaseのIAMロールを詳細に付与する

エキサイトの武藤です。 Firebaseのロール設定について、細かく付与する手順を説明します。 Firebaseから基本的なロール設定 歯車のメニューアイコンから「ユーザと権限」ページを開きます。 Firebaseの「ユーザと権限」ページ ユーザに対して、オーナーや閲…

Dart のコンストラクタを理解する

エキサイト株式会社の武藤です。 Flutterを使ったアプリ開発のプロジェクトにジョインしました。 Dartを触ってみて、コンストラクタにいくつか種類があることがわかったので、整理してみたいと思います。 コンストラクタ デフォルトコンストラクタ 名前付き…

Aurora MySQLをソースとしたDMS設定のポイント

AWS

エキサイト株式会社の武藤です。 以前VPCのサイジングに失敗し、VPCを再構築したお話を紹介しました。 VPC再構築判断の結果、既にAWSで本番稼働していたDBも移行することになりました。 tech.excite.co.jp DBをAWSに移行した際に、DMSを使った事例も以前に紹…

VPCのサイジングについての失敗談

エキサイト株式会社の武藤です。 AWSのVPCのサイジングについて失敗談がありますので、それについて説明します。 オンプレからAWSへシステム移行 internet-facing ALBのIPに関する仕様 VPCの再構築 終わりに 参考記事 オンプレからAWSへシステム移行 担当サ…

AWS移行におけるcloud-initを使ったLinuxの初期設定

AWS

エキサイト株式会社の武藤です。 オンプレにあるサーバをAWSへ移行する際に、AWS Application Migration Service (AWS MGN)を使いました。 その際に、オンプレ特有のサーバの設定もそのまま引き継がれるため、修正すべき箇所がいくつか出てきます。 EC2に…

Terraformのディレクトリ構造と設計指針の一例を紹介します

エキサイト株式会社の武藤です。 エキサイトではAWSの構成管理にTerraformを採用しているサービスがいくつかあります。 Terraformのディレクトリ構造について検索してみると、様々なパターンが出てきます。 どのパターンが最適なのか、選択に迷ってしまう方…

SolrJを使ってSolr検索をする

エキサイト株式会社の武藤です。 エキサイトホールディングス Advent Calendar 2021の18日目の記事です。 qiita.com 今回は、Spring Boot プロジェクトでSolrJを使ってSolr検索を実装する手順について説明します。 SolrJ SolrのJava用のAPIです。 solr.apach…

DBの不要なカラムを削除する

エキサイト株式会社の武藤です。 現在は担当サービスであるE・レシピのリビルドを進めており、技術負債の解消も行ってきました。 レシピデータを管理するテーブルには、現在の仕様で使われていないカラムが50個ほどあり、それらを削除しました。 今まで、仕…