sasaboの生活

フィヨルドブートキャンプ卒業生が30代未経験でWebエンジニアとして生活する様子

開発は進んでいます

JAZZギター練習用の自作アプリ開発ですが、進んではいます。 ですが記事化する時間と気力がありません。。。

Claude Code にやったことを記録するようなスキルを作って記録をしてはいるのですが、精査できていません。 精査するのが面倒で記事化できていません。

スマホで Claude Code をリモートコントロール

スマホで Claude Code をリモートコントロールするのもやってみました。 状況をちらちら見れるのは、かなり良い体験でした。

しかし、どうしてもスマホを見る機会が増え、週末の子供といる時間に「スマホばっかりみているお父さん」状態になっているので個人的に好ましくない状態だなと思っています。

あとスマホでコードレビューはしんどいです。 まず小さい。小さいだけで読む気がしません。 PR内容について、Claude と相談しようとしたときコピペ作業が発生するとスマホでの操作にイライラします。 そもそも、そんな状態でちゃんとPR見れるわけがないので、コードレビューはちゃんと席に座ってやることにしました。

体調面

最後に体調面について。 単純に睡眠時間が減ってきていて、明らかに次の日の朝だるい感じがあります。 ということで体調面をケアしながら開発しないと詰むなと感じております。

とりあえず、現状はそんな感じです。

屋号が欲しい

ギター練習のためのアプリの開発を少しずつですが進めています。 ちゃんとリリースするなら、何か屋号が欲しいということで屋号をつけることにしました。

屋号は Monobridgeという屋号にしました。 深い意味はなく、何かモノづくりに関する屋号をクロードくんに考えてもらった案の一つを採用した感じです。

これに伴い、プロフィールのアイコンを変更しました。 これまた前のアイコンはテキトーに作ったもので、ずっと変えたいと思っていたのでちょうど良かったです。 このアイコンもCanva でAIに作成してもらいました。

また、今後の宣伝も兼ねてXのアカウントも作成しました。

週報 (2026-06-15 〜 2026-06-21)

今週はあまり、開発に時間を使えませんでした。 金曜日が出張だったので、あまり進まず。自分的に金曜日、土曜日がゴールデンタイムのようです。 また Flutter での開発が初ということもあり、AIが実装した内容のレビューに時間がかかりました。 AIのモデルは Opus 4.8固定でした。 概ね実装は綺麗にできているものの、細かいところで気になるところはやはりありました。 ちょこちょこプロジェクトのルール化しているので少しずつ楽できるようにはなると思います。

2026-06-15 (月)

  • 新規プロジェクトの初期整備として、未使用プラットフォームフォルダ(linux/ macos/ windows/ web/)とIDE設定ファイルを削除(モバイル2環境のみ対応のため)
  • lintルールを flutter_lints から、より厳格な very_good_analysis に変更
    • analysis_options.yamlpublic_member_api_docs のみ無効化(アプリ本体には過剰なため)
    • デフォルトのカウンターアプリや pubspec.yaml の細かい指摘を解消し、flutter analyze / flutter test がクリーンであることを確認
  • コーディング規約ドキュメント(docs/coding-rules.md)を新規作成
  • ドキュメントの置き場所を整理(構成の「正」は coding-rules に置き、README は要約+リンクに留めて二重管理を回避)
  • GitHubに非公開リポジトリを作成してプッシュ
  • 依存パッケージを追加(sqflite / shared_preferences / path / dev用 sqflite_common_ffi
    • sqflite_common_ffisqlite3 がネイティブビルドフックを使う影響で必要Flutterが3.44.0以上に上がっていたため、pubspec.yamlenvironment: に下限を明示
  • スタックPRのリターゲット漏れ事故と復旧
    • 親ブランチに積み上げた子PRを、親マージ時に親ブランチを残したことでGitHubの自動リターゲットが効かず、子の変更が main に入らない事態に
    • 原因は「スタック構成+親ブランチ未削除」。作り直したPRで復旧
    • 再発防止:リポジトリ設定 delete_branch_on_merge をオン。以後はスタックPRを避け順次PR方式に

2026-06-17 (水)

  • 基盤と最初の機能を、サブエージェント駆動(実装TDD → 仕様適合レビュー → コード品質レビュー)でひと通り実装し、PRを作成(flutter test 全25件PASS、flutter analyze 0件)
  • 開発中に得た知見・対応
    • widget test で sqflite を使うと isolate版(databaseFactoryFfi)で2回目以降のDB操作がハングする → databaseFactoryFfiNoIsolate で解決
    • 実装プラン中のコード片が very_good_analysis の info lint を出すため、挙動を変えずに analyze クリーンを維持
    • 実機起動の安定性のため main()WidgetsFlutterBinding.ensureInitialized() を追加
    • PR説明の書式を統一(ファイル一覧は名前の次行にインデントで説明、概要は1行1情報の箇条書き)

2026-06-20 (土)

  • 既存コードのレビューと改善、入力まわりの作り替えを実施
  • 日付まわりをロケール対応(flutter_localizations / intl を導入、supportedLocales に日英)
    • 表示は日本語ロケールで「2026/06/20(土)」形式、保存は ISO YYYY-MM-DD のままにして表示と保存を分離
    • 日付入力を読み取り専用フィールド+showDatePicker のカレンダー選択に変更
  • 開発中に得た知見
    • SQLite には日付専用型が無く(保存クラスは NULL/INTEGER/REAL/TEXT/BLOB)、sqflite も num/String/Uint8List/null のみ → 日付は TEXT(ISO) 保存が定石
    • FilteringTextInputFormattermaterial.dart 経由では入らず flutter/services.dart の明示importが必要(TextInputType は入る)
    • intlDateFormat で非英語ロケールの曜日名等を使うには initializeDateFormatting() が必要
    • InputDecoration.labelText は空+未フォーカス時に大きく表示される → floatingLabelBehavior.always で小さく固定

2026-06-21 (日)

  • 前日からのレビューを継続し、リファクタ・規約整備・機能追加・不具合修正を細かくコミットしてマージまで完了。あわせて iOSシミュレータでの動作確認も実施
  • コーディング規約を整備:体言止めコメントは句点なし/if文の後に続く文があれば空行/三項演算子に処理を書かずガード節へ/クラス名は役割を厳密に(曖昧な Service を避ける)/テストの説明は日本語、を明文化
  • 永続化ライブラリ(drift)への移行方針を決定(リリースして使ってもらう前提で信頼性を最優先し、手書きより実績ある手段を採る)。別作業として実施予定
  • マージ後、ローカル main を最新化し、マージ済みブランチを削除して整理
  • Flutter/Dart の学び(C#との対比中心)
    • import は dart:package: → 相対の3グループを空行で区切る(directives_ordering
    • this は基本省略可(unnecessary_this)。コンストラクタ引数の this.x は「initializing formal」という別構文で必須
    • copyWith は「copy with changes」=イミュータブル前提の一部差し替え複製。C# の with 式 / Kotlin の copy 相当
    • StringBuffer が C# の StringBuilder 相当(writeln=AppendLine、write=Append)
    • dart format は設定項目がほぼ無い(行幅 page_width のみ)。Dart 3.7+ は「tall スタイル」が既定で、short整形のままの既存コードに当てると大きな差分が出る
    • データアクセスの窓口は「Repository」、低レベルな提供役は「Provider/Store」と名前を使い分けると役割が明確

週報 (2026-06-08 〜 2026-06-14)

6/8 の週は主に環境構築をやりました。(Mac を買い替えてから開発してなかったので、ほぼ最初からみたいな感じでした。) あとは Flutter の勉強。本読むだけじゃ全然頭に入らないので、やっぱりこのへんは実践あるのみっすね。

しかし、AI で環境構築やるのは楽。AI でやるデメリットとしては、設定ファイルの置き場とか設定内容をすぐに忘れてしまうこと。まぁ、それも AI に聞いて解決するんですけどね。根本理解してるかというと怪しい。 今後もこのままでいいのかは、正直よくわかりません。いや、理解しておいたほうがいいのはそうなんですけどね。 AI の進化がそれを覆してくる可能性も全然ある時代だなと。。。

2026-06-09 (火)

  • Windows の WezTerm 設定 (~/.wezterm.lua) を Mac 用に移植
    • PowerShell 関連・Windows パス等の Windows 固有設定を除去
    • Moralerspace Argon をインストール
    • フォントサイズを 16pt に調整
  • Mac に Neovim の設定を構築(Windows 版 ~/Downloads/nvim を移植)
  • lazy.nvim のブートストラップ設定を公式ドキュメントに合わせて作成
  • config/base.luaconfig/keymap.lua を Windows 版からコピーし、Windows 固有設定を除去
  • 不要プラグインを除外してプラグイン設定ファイルを作成
  • GitHub CLI (v2.93.0) をインストール
  • cship(Claude Code 用ステータスライン)を公式スクリプトで導入
    • モデル名・コスト・コンテキストバー・使用制限・ピーク時間を表示
  • brew install starship で Starship (v1.25.1) をインストール
  • Catppuccin Powerline プリセットを適用
  • cship の1行目を $starship_prompt から $directory $git_branch に変更
    • ターミナルの Starship デザインと切り離し、シンプルにディレクトリ+ブランチのみ表示

2026-06-10 (水)

  • zoxide を brew でインストールし、~/.zshrc に初期化設定を追加(z/zi でディレクトリジャンプ)
  • zsh の補完を大文字小文字無視・あいまい一致にする設定を案内
  • fzf を brew でインストールし、シェル統合(~/.fzf.zsh)を ~/.zshrc に追加
    • Ctrl+R(履歴検索)、Ctrl+T(ファイル検索)、Alt+C(cd検索)が有効に
  • bat・git-delta・tree を brew でインストール
  • gh auth login で GitHub CLI にログイン
  • ブラウザ版 Claude Code(claude.ai/code)をセットアップ
  • CLI版とweb版の連携方法を調査
    • --remote:CLIからクラウドセッションを新規作成
    • --teleport:webセッションをCLIに引き継ぐ(一方向)
    • --remote-control:ローカルCLIセッションをブラウザから監視・操作

2026-06-10 (水)

2026-06-14 (日)

  • ジャズギター練習アプリ(Flutter)の開発環境を構築
    • Flutter SDK、Android Studio + SDK、JDK17、CocoaPods、Xcode をインストール
    • flutter doctor で問題なしを確認
  • Neovim を Flutter/Dart 開発用に設定
  • Flutter プロジェクトを新規作成し git 初期化
    • 開発ロードマップなどのドキュメントを整備
  • 初期フェーズの詳細な実装プランを作成

日報と週報を Claude にまとめてもらう

JAZZギター練習アプリ開発において、とりあえずやったことは記録したい。 だけどめんどくさい。ということで日報と週報を書く Skill を用意して箇条書きでやったことを書き出してもらうようにしました。

この方法だと Claude Code で作業した内容しかメモできないのですが、今は大体が Claude Code で作業してるので大体これでいけそうです。

JAZZギター練習アプリを作ることにしたよ

はじめに

久しぶりです。生きています。sasabo です。 相変わらず子育てが大変ですが、ちょっとだけ余裕が出てきました。 AIが優秀なおかげで、これなら隙間時間に開発できるのでは?と思い「とりま、やってみるか」精神でやってみることにしました。


アプリを作ることにした理由

理由は以下の通りです。下記内容を Claude に与えて、アプリの仕様を固めていっています。

  • 少し時間的な余裕が出てきた
  • AIが凄いので隙間時間で実装できそう
  • オブジェクト指向で綺麗なコードをかけるようになりたい
  • Claude Code をちゃんと使えるようになりたい
  • JAZZギターの練習が続かない。練習をサポートするモバイルアプリがあると嬉しい

また、開発費の回収も考慮し有料アプリにしようと考えています。 お金を出してもらうので、ちゃんと価値のある製品になるよう頑張ります。 また黒字化を目指して、ちゃんとアピールしていこうと思っています。 この経験は、何かしら仕事に役立つような気はしています。(やってみないとわかりませんが…)


アプリの概要

JAZZギター初心者が毎日の基礎練習に使えるシンプルなツールを考えています。

主な機能(予定):

  • メトロノーム
  • 指板音名トレーニング
  • コードトーンアルペジオ練習
  • テンション音練習
  • 調号暗記
  • 練習日記

「サーバーなし・サブスクなし」のシンプルな設計で、買い切りです。(完成したら、買ってください❤️)

やった気になるアプリじゃなくて、ちゃんと見になる練習ができるアプリにしたいなぁ。


開発スタック

仕事では C# を書いていますが、今回は Flutter / Dart でやっていきます。 単に新しいフレームワーク、言語を勉強するほうが楽しそうだったからです。(本当は Visual Studio があまり好きではないからです。)

  • Flutter / Dart(iOS・Android対応)
  • Claude Code(AIコーディングツール)
  • SQLite(ローカルデータ保存・練習日記)
  • NotebookLM(音楽理論の知識ベースとしてClaude Codeに参照させる)

今後

開発の様子をちょこちょこ発信できればと思います! がんばれ!自分!

FRONTIER BACKYARD ON STAGE

CD派の私ですが配信限定の作品も増えてきたので、Apple Music を契約しました。かれこれ三度目?契約しては止めるを繰り返しています。正直、今ひとつ使い慣れていません。

そんな Apple Music で FRONTIER BACKYARD の ON STAGE というアルバムを聴きました。 7人構成の豪華さ、ライブ感たっぷりのアルバムでした。(ライブに行けないのが残念) なぜか少しエモい気持ちにもなる不思議なアルバムです。

music.apple.com