JavaScriptのlint/format BiomeとOxcの使いどころ

こんにちは、いっしーです。

Biome と Oxc をご存知でしょうか。

どちらも JavaScript / TypeScript の lint / format 関連で、ESLint や Prettier の代替として名前が挙がるツールです。

Biome とは

Biome は、JavaScript / TypeScript 向けの formatter / linter を含むツールです。

ESLint と Prettier を別々に入れていたところを、Biome でまとめて扱う、というイメージです。 "biome check --write" コマンドで、lint、format、自動修正をまとめて実行できます。

Oxc とは

Oxc は、VoidZero による JavaScript / TypeScript 向けの高速なツール群です。

Oxc には、lint を担当する Oxlint、format を担当する Oxfmt があります。 そのほか parser、transformer、resolver、minifier なども含んでいます。

自分は Vite+ を使っていて、それに組み込まれた lint / format として Oxc に触れています。

業務では Biome を導入した

業務で触っているのは、既存資産の多い Rails アプリです。

長く運用されてきたアプリなので、古い JavaScript も多く残っています。

もともと ESLint による CI チェックがありましたが、メンテナンスされずに放置されていました。そのチェックが落ちても「これは今は無視でよい」と判断する場面があり、それ自体が認知負荷になっていました。

そこで、チームで合意して Biome を導入しました。 目的は、JavaScript / TypeScript の記述を少しずつ揃えることです。

現状の運用はざっくりこうです。

開発者の手元
  Biome の自動修正を実行
  変更したJS/TSの記述を揃える

CI
  変更差分に対してチェック
  既存コード全体ではなく、変更箇所を見る

この運用だと、新規実装でも既存改修でも、通りがかった JavaScript の記述が少しずつフォーマットされていきます。

一方で、既存実装を壊さないことも重要です。 自動修正できるからといって、既存コード全体を一気に整形するわけではありません。

個人開発では Vite+ 経由で Oxc

個人開発アプリでは Vite+ を使っています。

もともと業務で Webpacker の代替として Vite を検討していたこともあり、個人開発では Vite+ を採用しました。

Vite+ では、開発コマンドの入口を "vp" に寄せられます。

vp dev
vp build
vp check
vp test

この "vp check" の中で、Oxc の lint / format が使われています。

自分の感覚としては「Oxc を選んだ」というより、「Vite+ を使ったら Oxc の lint / format が組み込まれていた」に近いです。

特に印象が強かったのは "vp check --fix" の速さです。

コミット時にフォーマットが走るようにしていますが、実行速度が速すぎて、フォーマットが入っていることをほとんど意識しません。

コードを書く
  ↓
コミットする
  ↓
vp check --fix が走る
  ↓
ほぼ意識しないうちに lint / format が終わる

lint / format は、開発中に意識する時間が短いほどよいと思っています。 その意味で、Vite+ 経由の Oxc lint / format はかなり気持ちがよかったです。

どこで使うべきか

Biome は、既存資産の多いサーバーサイドアプリに入れやすいと感じています。

Biome が合いやすい場面

  • 既存プロジェクトに載せたい
  • ESLint / Prettier の代替として説明したい
  • ローカルで自動修正したい
  • CIでは変更差分を見たい
  • 既存コードを一気に壊したくない

Rails や Laravel のようなアプリでは、既存のビルド設定、CI、チーム運用、古い JavaScript、部分的なフロントエンド移行などがあります。 そこに、開発体験全体をまとめる思想のツールをそのまま入れるのは重いです。

一方で、Vite+ 経由の Oxc lint / format は、個人開発だからこそ試しやすかったです。

Vite+ 経由の Oxc が試しやすい場面

  • 自分だけで導入判断できる
  • 新しいツールチェーンを試したい
  • 開発コマンドを vp に寄せたい
  • lint / format の速さを体感したい
  • 失敗しても戻しやすい

JavaScript の lint / format ツールを選ぶときは、ツールそのものだけでなく、誰が合意して、どの既存フローに載せて、どこまで自動修正してよいのかまで考える必要があります。

まとめ

Biome と Oxc はどちらも JavaScript / TypeScript の lint / format まわりで見かけるツールですが、導入しやすい場所は違ってそうです。

既存資産の多いプロダクトには、チームで合意しやすく、少しずつ記述を揃えられる Biome が合っていました。 個人開発では、Vite+ に組み込まれた Oxc の速さを気軽に試せました。業務だとNext.js / Nuxt.js などでの採用になると思います。

Vite+ を使って映像作品バックログアプリをリリースした

Vite+ を使って みるカン という小規模な SPA をリリースしました。
積んだ映画やシリーズを整理して、次に何を見るか決めるためのアプリです。 2026/6/29現在、新規ユーザー登録を停止しております。

Vite+ とは何か

今回使った Vite+ は、VoidZero が提供している Web 開発向けの統合ツールチェーンです。
詳しくは VoidZero の Announcing Vite+ Alpha を読むのが早いです。

もともと Vite は、モダンな Web フロントエンド開発のための高速なビルドツールとして広く使われています。
開発サーバーと本番ビルドを中心にした、いわゆるフロントエンド開発の土台になるツールです。

Vite+ はその Vite を中心にしつつ、ランタイム、パッケージマネージャー、lint や test を含む周辺ツールまで、ひとつの入口にまとめようとしているものです。

単に「Vite の上位版」というより、Vite を中心にした開発体験をもう少し一貫したものにしようとしている存在、という理解です。

いまなら出せそうだと思った

これらが重なって、小さな SPA なら短期間でリリースまで持っていけそうだという見通しができました。

実際に、開発用マシンから離れる出張を挟んでも2週間ほどでリリースできました。

前から気になっていた Vite 系を試したかった

今回 Vite+ を選んだのは、Vite には前から関心があったからです。
フロントエンド界隈での評判をよく聞いていましたし、業務でも Rails アプリケーションのビルドツール移行を検討する中で、移行先として vite_rails を自分で提案していました。

そういう流れもあって、Vite+ にも自然に興味が向きました。
個人開発で小さめの SPA を 1 本作るなら、Vite+ を触ってみるにはちょうどよさそうだと思いました。

作ったのは みるカン という小さな SPA

今回作ったみるカンは、積んだ映画やシリーズを整理して、次に何を見るか決めるためのアプリです。

技術構成は次のような感じです。

  • Vite + React
  • Supabase
  • Supabase Edge Functions
  • Resend
  • Vercel
  • Cloudflare

以下を含むくらいの規模感です。

  • API 通信あり
  • 状態管理あり
  • 認証あり
  • PWA 対応あり
  • 本番デプロイあり

Vite+ は AI 前提の開発と相性がよかった

実際に感触がよかったのは、vp が統一された入口になっていることでした。

人間がコマンドを覚えやすいという話ではありません。
今回の開発では、自分で何かコマンドを叩くより、セッション中に AI エージェントが実行することのほうが圧倒的に多かったです。

そのときに効いたのが、入口がシンプルで、AGENTS.md や CLAUDE.md に端的に書ける量に収まっていることでした。

何をどのツールのどのコマンドで実行するのかを長々と説明しなくても、

  • vp dev
  • vp check
  • vp test
  • vp build

のように短く整理できます。

Vite+ は単に速いというより、AI 前提の開発フローにうまく乗せやすかったという印象があります。

vp create のあとにエージェント向けファイルの雛形が出てくるのも、方向性としてかなり納得感がありました。

開発体験がよかった

何もかもが速いと感じました。

実装中はセッション内でエージェントにコード変更を任せて、そのままコミットまで進めるよう指示しました。
pre-commit では高速に lint が走り、Vitest も軽快でした。
最終的には、自分で動作確認したり、出てきた変更を読んで判断したりするところにいちばん時間を使いました。

Vercel の deployment でも build log が 15 秒前後で終わることがあり、かなり速く感じました。
もちろん厳密なベンチマークを取ったわけではありません。

AI 前提だと進め方も変わる

今回は Claude Code と Codex を併用して開発しました。

併用した理由はシンプルで、まずは週次制限の都合です。
加えて、Claude Code は業務で触る機会がなかったので、このタイミングで試してみたかったというのもあります。

開発中には codex-plugin-cc のようなものも現れて、興味本位で少しだけ触りました。
このあたりの周辺ツールの動きも含めて、いままさに変化しているところに乗っている感覚がありました。

実装作業は AI に任せた一方、開発者が判断しやすい状態を作ることを意識しました。
具体的には、AI に調査結果や実装方針を docs/ 配下の Markdown に出力させて、それもコード管理に含めていました。

個人でやる短期開発だと、毎回ブランチを切って PR を立てる運用はかなり重いです。
スピード優先で main ブランチにどんどんコミットを積んでいきました。
「どういう方針なのか」「なぜこうしたのか」「何が終わっていないのか」を開発者も AI も追いやすくするために、docs を更新していくやり方は楽でした。

ただ、この進め方には当然デメリットもあります。
初期の検討過程や途中のコードの背景が、Issue や PR ではなく最終的にコミット履歴に寄りやすくなります。
それに、スマホから気軽にアイデア段階のメモや TODO を登録しにくいです。

なので、リリース後はいままでの進め方をやめて GitHub Projects を作成しました。
今後は通常どおり Issue 単位で実装を進めるつもりです。

実装よりコードの外側に時間を使った

実装そのものでは、正直ほとんど詰まりませんでした。
Claude Code と Codex にかなり助けられました。

その一方で、時間を使ったのはコードの外側でした。

  • 無料枠の制約確認
  • ホスティング先の選定
  • ドメイン取得
  • 問い合わせ窓口用メールの運用準備
  • Supabase Edge Functions の secret や deploy
  • 上記のための Web コンソール操作

自分はできるだけコストをかけたくなかったので、無料枠でどこまでいけるかもかなり気にしていました。
ホスティングは暫定で無料プランのある Vercel を使いましたが、Vite+ を使う以上、将来的には Void も楽しみにしています。

Cloudflare でドメインを取得して、問い合わせ用のメールアドレスも用意しました。
個人用アドレスをそのまま出したくなかったからです。

また、ローカルでは seed で流し込んだ初期ユーザーを使って実装を進めていたので、本番の会員登録導線を後から確認したときに、メール送信まわりの制約に気づく場面もありました。
その結果、急遽 Resend を使うことになりました。

それとは別に、実際に一番時間を使ったのはロゴとシンボルでした。
東京出張中にホテルで ChatGPT のモバイルアプリで壁打ちしながら、みるカンのコンセプトをどう見た目に落とすかを整えました。
アプリとして出すには見た目や印象も必要です。正直、大急ぎで仕込んだので粗い出来です。

この作業は時間がかかったものの、私物 PC を持ち出してコードを書く必要はありませんでした。
移動中や出張中でも、ChatGPT のモバイルアプリで進められたのは今回おもしろかったところです。

ちゃんと出せたのがよかった

今回は、小さな SPA ではあるものの、ちゃんとリリースまで持っていけました。

その理由を考えると、やはり次の3つが大きかったと思います。

  • 可処分時間が少し戻ってきたこと
  • AI によって実装速度がかなり上がったこと
  • Vite+ がその流れを気持ちよく支えてくれたこと

AI に実装を任せると、試行回数が増えます。
試行回数が増えると、開発、check、test、build の軽さが効いてきます。
Vite+ はその点で、今回かなり気持ちよく使えました。

今回の話は、Vite+ がすごいというだけの話ではありません。
いまの個人開発では、AI と軽い開発基盤が合わさると、短期間で小さなものを出し切る現実味がかなり上がる、という話だったと思います。

まとめ

今回の個人開発では、Vite+ を試すこと、AI を前提にした開発フローを試すこと、そして何よりリリースして自分で使うことを目標にしていました。
小さくてもちゃんと出せたのがよかったです。

結果として、Vite+ はかなりよかったです。
ただ、本当に時間を使ったのは、認証、メール、ドメイン、無料枠、そしてロゴやシンボルのようなコードの外側でした。

個人開発のドメインを Cloudflare で取得して問い合わせ窓口も用意する

個人開発アプリの問い合わせ窓口を作る際に新しくGoogleアカウントを作成して管理するのは手間だったので、普段使っている個人 Gmail アカウントをそのまま使い、Cloudflare Email Routing で受信を転送しつつ、Gmail の送信元設定で独自ドメイン名義の送信までできるようにしました。

なぜCloudflareでドメインを管理するのか

Google Domainsの「シンプルで余計なことをしない」という良さを引き継いでいるのがCloudflareです。

  • 卸売価格: ドメイン登録料に利益を乗せない価格設定のため、更新費用が他社より安い。
  • WHOISプライバシー無料: 所有者の個人情報保護がデフォルト。
  • Email Routing機能: 追加費用なしでメール転送が組める。今回の肝。
  • DNS反映が爆速: エンジニアが求めるスピード感で設定が反映される。

1. Cloudflareでのドメイン取得

まずはドメインの確保です。

  1. Cloudflareにログインし、サイドバーの Domain Registration > Register Domains をクリック。
  2. 検索窓に希望のドメインを入力し、[Buy] ボタンから購入手続きを進める。
    • ※決済エラーが出る場合は「ハマりどころ」セクションを参照。
  3. 購入完了後、ホーム画面の Websites 一覧に取得したドメインが表示されるので、そのドメイン名をクリックして管理画面に入ります。

2. Email Routingによる受信設定

次に、届いたメールを個人Gmailへ転送する設定です。

  1. ドメイン管理画面の左メニューから Email > Email Routing を選択。
  2. [Get started] ボタンを押し、機能を有効化する。
  3. Destination addresses タブで、自分の個人Gmailアドレスを登録して認証を完了させる。
  4. Routing rules タブで [Create address] をクリック。
    • Custom address: support など任意の文字列を入力。
    • Destination address: 先ほど登録したGmailアドレスを選択。
  5. [Save] を押すとDNSレコードの追加を求められるので、[Add records automatically] をクリックして一括適用する。

3. Googleアカウントでの「アプリパスワード」発行

Gmail側から独自ドメイン名義でメールを送信するために、専用の認証キー(アプリパスワード)が必要です。

  1. Googleアカウントの アプリパスワード設定 にアクセス。
  2. アプリ名に「Support Mail」などと入力して作成。
  3. 表示される 16桁のパスワード をメモする。
    • ※Googleアカウントで2段階認証が有効である必要があります。

4. Gmailでの送信元設定(SMTP)

個人 Gmail から、独自ドメインのアドレスで返信できるように設定します。

  1. Gmail の設定(歯車アイコン)から [See all settings] を開き、Accounts and Import タブへ移動します。
  2. Send mail as: 欄の一番下にある返信設定で、「メールを受信したアドレスから返信する」 を選んでおきます。これを有効にしておくことで、support@... 宛のメールに対して support@... 名義のまま返信しやすくなり、個人の Gmail アドレスが相手に見えてしまうのを防ぎやすくなります。
  3. Send mail as: の [Add another email address] をクリックします。
  4. 名前と、取得した独自ドメインのメールアドレスを入力します。
  5. Treat as an alias のチェックを外します。
  6. SMTP サーバー設定 を以下のように入力します。
    • SMTP Server: smtp.gmail.com
    • Username: 自分の個人 Gmail アドレス(@gmail.com を含む)
    • Password: 先ほど発行した 16 桁のアプリパスワード
  7. 確認メールが届くので、承認すれば設定完了です。

ハマりどころと対策

決済時の広告ブロック

Cloudflareでのドメイン購入時、決済エラー(temporarily blocked)が出る場合があります。広告ブロックソフトの保護をオフにするか、シークレットモードで実行すると回避できることが多いです。

Gmailの「自己ループ」仕様

自分のGmailから独自ドメインのアドレス宛にテストメールを送っても、受信トレイには現れません(送信済みには入る)。疎通確認は、必ず「全く別のメールアドレス」から送ってテストする必要があります。

GitHub Actions と AWS CodeBuild を使って重い lint 実行環境を見直した話

こんにちは、いっしーです。

今回は、重くなっていた lint 実行環境を見直す中で、GitHub Actions と AWS CodeBuild を使う構成に切り替えたときの話を書きます。

この記事は構成の正解を紹介するというより、重い lint 実行環境をどう見直す判断に至ったか、という話です。

また、自分は普段 Rails アプリケーションの機能開発を主にしている Web エンジニアで、インフラ構築は今回が初めてでした。
それでも、小さい差分から進めることで形にできたので、その点も含めて残しておこうと思います。

背景

もともと、CI では Docker イメージを pull してジョブを実行する構成になっていました。

PR で変更されたファイルだけをチェックする lint も、その前提で動いていました。
そのため、lint を通すだけなのに、アプリ本体と同等の重い実行環境を使っていました。

以前から「もう少し軽くできそうだ」とは思っていたものの、機能開発や他の優先課題があり、すぐに手を付けられていたわけではありませんでした。

直近で、イメージの保管先を変更する出来事があり、請求の状況を見たときに、「これはジョブ単位の最適化ではなく、構成自体を見直したほうがよさそうだ」と感じるようになりました。

小さく切り出す方針にした

最初から GitHub Actions と AWS CodeBuild の構成を考えていたわけではありませんでした。

もともとは、実行基盤を見直せば費用を抑えられるのではないか、という仮説から調査を始めていました。
その中で、「lint 系の軽量 workflow だけを切り出す」というアイデアにたどり着きました。

この時点で、自分の中では課題が 2 つありました。

  • 重い lint 実行環境をそのまま持ち続けるのはつらい
  • 共有された CI 基盤の費用帰属が曖昧だった

この 2 つを同時に少し前進させるには、全部を一気に移すより、軽量 workflow だけを別基盤へ寄せるほうが現実的だと考えました。

なぜ GitHub Actions と AWS CodeBuild だったのか

この構成を選んだ理由は、単純な節約だけではありませんでした。

むしろ大きかったのは、費用負担の整理です。

利用している CI/CD サービスでは、実行にかかったコストを比較的そのまま追いやすい状況でした。 一方で、通常の GitHub Actions をそのまま使うと、費用は共有された GitHub Organization 側に乗ります。

組織としては同じでも、実際の負担単位は別で考えたいことがあります。
今回も、軽量な workflow を追加したいだけなのに、その実行コストが共有された GitHub Organization 側に乗り続ける構造は扱いづらいと感じていました。

つまり、通常の GitHub Actions に移すだけでは、実行環境を見直せても、費用負担の整理まではしにくかったということです。

そこで、GitHub Actions の self-hosted runner を AWS 側で動かすことで、

  • lint 実行環境の重さを見直す
  • 実行コストをサービス側の負担として扱いやすくする

の両方を狙うことにしました。

その結果、GitHub Actions の self-hosted runner を AWS CodeBuild で動かす構成を選びました。

実装の考え方はシンプルだった

やったこと自体は、意外とシンプルでした。

1. GitHub Actions 側に軽量 workflow を用意する

まず、PR で変更されたファイルを対象に lint を実行する workflow を用意しました。

ここで意識したのは、重い既存ジョブをそのまま持ってくるのではなく、

  • PR で変更されたファイルに対象を絞る
  • lint に必要なものだけを実行する
  • アプリ本体の重い依存から切り離す

ということです。

たとえば、実際のイメージはかなりシンプルで、PR で変更された Ruby ファイルだけを対象に RuboCop を流すような形です。ポイントは、対象ファイルと実行内容を絞り、実行先も軽量な runner に寄せたことです。

name: lint

on:
  pull_request:
    types:
      - opened
      - synchronize
      - reopened

jobs:
  rubocop:
    runs-on:
      - self-hosted
      - linux
      - x64
      - ci-light
    steps:
      - uses: actions/checkout@v5

      - name: Get changed Ruby files
        id: changed_files
        uses: tj-actions/changed-files@v45
        with:
          files: |
            **/*.rb

      - name: Set up Ruby
        if: steps.changed_files.outputs.any_changed == 'true'
        uses: ruby/setup-ruby@v1
        with:
          bundler-cache: true
          bundler-config: gemfile=gemfiles/ci.gemfile

      - name: Run RuboCop
        if: steps.changed_files.outputs.any_changed == 'true'
        run: bundle exec rubocop ${{ steps.changed_files.outputs.all_changed_files }}

2. lint 用の Gemfile を本体から分離する

lint のためだけにアプリ本体と同じ Gemfile を使うのは重いので、CI 用の Gemfile を分けました。

これによって、lint 実行に必要な依存だけを切り出しやすくなり、実行環境の責務も整理しやすくなりました。

たとえば、CI 用の Gemfile は次のようなイメージです。

source "https://rubygems.org"

ruby File.read(".ruby-version").strip

gem "rubocop"
gem "rubocop-performance"
gem "rubocop-rspec"

Rails アプリだと、なんとなく本体の Gemfile に寄せたまま進みがちですが、今回のように用途がはっきりしているなら、分けてしまったほうが考えやすかったです。

3. 対象 workflow を 3 つ想定し、実際には 2 つに絞った

最初に移設候補として考えたのは、軽量な workflow 3 つでした。

ただ、実際に今回移したのはそのうち 2 つです。
残り 1 つは、その時点では実行時間や役割の面でまだ切り出しどころを見極めきれなかったため、今回は移設せず、将来の候補としてコメントに残すにとどめました。

結果として、「軽量そうなものを全部移す」のではなく、まずは小さく確実に動かせる範囲に絞って進める形になりました。

この判断は、インフラ初挑戦の自分にとっても進めやすく、ちょうどよかったと思っています。

4. AWS 側に最小限の実行基盤を用意する

インフラ側では、GitHub Actions の self-hosted runner として動かすための実行基盤を用意しました。

  • 実行する場所
  • 権限
  • 起動のための設定
  • ログの出力先

を揃える、という話です。

最初から全部入りの構成を作るのではなく、まずは小さく動く最小構成を目指しました。

インフラ初挑戦でも進められた理由

今回、自分にとってインフラ構築は初めてでした。

それでも進められたのは、次の条件が揃っていたからだと思います。

インフラ構築がコード化されていたこと

変更をコードとして追えるのは大きかったです。
画面上で設定を手作業で積んでいくより、何をどう追加しているのか見通しが持ちやすかったです。

リソース名が追えたこと

正直、「名前は効いたことあるけどよく知らない」リソースが多かったです。
ただ、「これは何か」が分からなくても、ひとつずつ追える状態だったので、そこで完全に止まることはありませんでした。

分からないものは AI に聞きつつ、全体像を補いました。

インフラエンジニアにレビューしてもらえる環境があったこと

これが一番大きかったかもしれません。

最初から全部理解していたわけではありません。
インフラエンジニアに確認しながら、必要なポイントをレビューしてもらい、安心して進められる状態がありました。

また、開発のエンジニアにも使い勝手や動作確認をしてもらいながら進められました。

ChatGPT と GitHub 連携を、調査と理解の補助として使えたこと

今回は、社内で利用している ChatGPT を、壁打ち相手兼調査補助として使いました。

実装を丸ごと任せるというより、

  • インフラ構成をコードで管理している既存の設定を調べる
  • どのリソースが何のためにあるのか整理する
  • 追加変更に必要そうな差分を見立てる
  • 最小構成で始めるなら何が必要か考える

といった、理解の土台を作るところで特に助けられました。

自分は普段アプリケーション開発が中心なので、既存のインフラ構成を読むこと自体が最初のハードルでした。

GitHub 連携を通じて構成管理用のコードを調べながら、全体の見通しをつけられたのは大きかったです。最初の「何がどこにあるのか分からない」を越える助けになりました。

また、今回はまとまった時間を取って取り組むというより、業務の合間に少しずつ進める形でした。
そのため、開発用のAIツールを使うより、ブラウザでタブ開けっ放しで放置できる ChatGPT のほうが今回のケースには合っていました。

もちろん、最終的にはインフラエンジニアにレビューしてもらいながら進めました。

小さい差分に絞ったこと

これもかなり重要でした。

重い CI 全体を移すのではなく、軽量 workflow だけをまず移すと決めていたので、考えることが増えすぎませんでした。

結果として、業務の合間に進めながらでも、5 営業日以内には終えられました。
大きなハマりどころもなく進められたのは、この進め方のおかげだったと思います。

得られたものは、節約そのものより整理と経験だった

今回の成果をひとことで言うと、節約そのものより、整理だったと思っています。

  • 重い lint 実行環境を見直せた
  • 共有された CI 基盤で曖昧だった費用帰属を少し整理できた
  • チームとして以前から感じていた lint 運用の課題に手を付けるきっかけになった

そして個人としては、これがかなり大きな経験になりました。

普段は Rails アプリケーションの機能開発が中心で、インフラ構築は今回が初めてでした。
その中で、必要な範囲を見極めて、小さく構成を変える経験ができたのは、自分にとってかなり意味がありました。

これからもメンテナンスしていく責任はある

ひとつ正直に書いておくと、運用について「もう完全に安心です」とはまだ言い切れません。

大きな問題は今のところ上がっていないのですが、だからといって十分な知見がもうあるとは思っていません。
ログの見方や継続的な保守も含めて、これから自分でも責任を持って見ていく必要があると感じています。

おわりに

今回やったのは、CI 全体を作り直すような大きな話ではありませんでした。

その中で、自分は小さく着手しやすい改善を 1 つ進めました。

全体を一気に変えず、軽いものだけに絞って、専門家のレビューを受けながら進める。 この進め方なら、普段アプリ開発をしているエンジニアでも、インフラ寄りの改善に踏み出せることがあると感じました。

また今回あらためて思ったのは、AI の助けによって、専門領域の垣根を越える動きは以前よりやりやすくなったということです。
もちろん、AI だけで何でもできるわけではありませんが、知らない領域に入るときに、調査や整理、壁打ちの相手がいることで、最初の一歩のハードルは確実に下がったと思います。

一方で、それが成り立ったのは、自分ひとりの力ではありませんでした。
インフラ構成がコード化されていて、既存の構成を追える状態だったこと。
分からないところを確認できるインフラエンジニアがいて、レビューを受けられる環境があったこと。
さらに、開発のエンジニアにも使い勝手や動作確認をしてもらえたこと。
そうしたチームと環境があったからこそ、小さくても前に進められたのだと思います。

同じような課題を抱えている方の参考になればうれしいです。

実録!俺が観たフィヨルドブートキャンプと業務未経験のエンジニア1ヶ月目

こんにちは。 就職してから映画を観る本数が激減したいっしーです。

この記事は、フィヨルドブートキャンプ Part 2 Advent Calendar 2022の5日目の記事として書いています。

Part1はこちら。

何の記事?

  • プログラミングスクールのフィヨルドブートキャンプについて
  • Webエンジニアとして1ヶ月働いてみて

などについて書いた記事です。

以下の方に参考になるかもしれません。そうであれば幸いです。

  • フィヨルドブートキャンプに参加を検討している方
  • 業務未経験でエンジニア就職を希望する方

あんた誰?

筆者はプログラミングスクールのフィヨルドブートキャンプを1年半かけて卒業し、11月からWebエンジニアとして働いている者です。

卒業ステータスにはなりましたが、自作サービスはまだリリースしておりません(2022年12月現在)。

ほぼ完成しているもののUX上の致命的なバグがあって、終業後にMPが残っていたら取り組んでいます。

フィヨルドブートキャンプには

  • Web業界もエンジニア業務も未経験
  • 事務、接客の経験
  • 無職状態
  • 既婚、子ども1人
  • 他スクールでRuby on Railsの学習経験あり
  • 28歳(就活時は29歳)

というステータスで参加しました。

フィヨルドブートキャンプ内で「達人プログラマー輪読会」「ミノ駆動本輪読会」「アジャイルサムライ輪読会」を主催しました。

所属企業については、いまのところフィヨルドブートキャンプ内のみで公開しています。 フィヨルドブートキャンプの紹介企業で、東京に本社があって、Railsを採用している企業です。

フィヨルドブートキャンプについて

フィヨルドブートキャンプを「FBC」と省略させてください。

プラクティス

FBCではひとつひとつの学習カリキュラムを「プラクティス」と呼んでいます。

以下のページでFBCの全プラクティスを確認できます。

bootcamp.fjord.jp

自分が参加した2021年半ばの時点に比べると

  • 「Webセキュリティ」が追加された
  • 「lsコマンドを作る」が分割された
  • 「Ruby」〜「Ruby on Rails」の順番が入れ替わった
  • いくつかのプラクティスが「発展編」に移動して、卒業するために必須ではなくなった

といった大きな変化がありました。規模の小さなアップデートは、毎日のように行われています。

フロントエンド・サーバーサイド・インフラのどの方面においても基礎となる知識を体系的に学習できる内容になっていると思います。自分が個人的に学習したい or 将来的に登場する技術がまったく違うパラダイムのものであっても、その習得には基礎知識が前提となっている可能性が高いです。

「とは言っても ○○ って正直どうなの?いま学習する意味あるの?」と思うことがあるかもしれませんが、業務未経験の場合はあんまり気にしなくていいように思います。

FBCでの学習の本質は「何の技術を学んだか」よりも「技術を学習する経験を積むこと」それ自体だと思うからです。

「技術を学習する経験を積む」

プラクティスは基本的に以下の繰り返しです。

  1. プラクティスページのドキュメントを読み、学習対象について知る

    (Unknown unknowns を Known unknowns にする作業)

  2. 学習対象について調査し、日報や分報やブログにアウトプットする

    わからない部分について、わからない旨を具体的に表明する

    (Known unknowns を Known knowns にする作業)

  3. 要件を整理して提出物(Pull RequestやGistやスクショ)として具体化する

    (学習対象を Known knowns にしたと証明する作業)

data.wingarc.com

チーム開発に到達するまでは、本当にイヤというほどこれの繰り返しです。

そして、多くの受講生が何らかのプラクティスで詰まり、単純に物凄く時間がかかったりします。

そのような難所を攻略する方法はひとつだけです。

わかりたい対象をキーワードとしてたくさんググります。そのキーワードがちょっとでも入ってる本をたくさん買って読みます。片っ端から見てやるぞというイメージです。 とにかくそのキーワードが含まれている情報を浴びることを意識します。 そのキーワードについて様々な角度から書かれているものを見ているうちに共通点と差異からおぼろげながら輪郭が見えてくるはずです。

docs.komagata.org

クラピカが鎖について徹底的に調べたり触ったり匂いを嗅いだりするやつですね。

https://pbs.twimg.com/media/EsLOWhnUwAIl7ww?format=jpg&name=small

(きっとゴレイヌも…)

こういった経験を繰り返し積むことによって、卒業課題である自作サービス開発において外部APIや外部ライブラリを利用する際にドキュメントを読んだり、ReactやAWSといったプラクティス外の技術を採用するといったチャレンジを行うことが可能になります。

インプットとアウトプットのサイクルを回していくことは、仕事でも全く同じだと思います。

チーム開発

プラクティスについて語ったので、FBCにおけるチーム開発についても触れておきます。

チーム開発で受講生が触るリポジトリは以下になります。

github.com

このリポジトリの最大の特徴は、それまでユーザーとしてサービスを利用してきた受講生自身が主な開発者であることですが、ここではOSSでもあることに注目したいです。

このフィヨルドブートキャンプのサイト自体はオープンソースソフトウェアとして公開されています。また開発に使っているカンバンやPull Requestのやりとり、週次のふりかえりミーティング・見積もりミーティングの議事録も全てオープンになっているので、就職するときはその成果をそのまま面接官の方に見せることができます。

bootcamp.fjord.jp

筆者も就職活動時に、以下のURLを企業に共有しました。

github.com

OSSであることを利用して、これをしくみ化しているのは天才的だと思います。

また、チーム開発で積むことができる最も重要な経験はGitHub上のコミュニケーションに慣れることだと思います。

ひとつのIssueをこなすまでの流れを把握し、Pull RequestのDescriptionを丁寧に書き、他の受講生が書いたコードに対してレビューしたり、動作確認の依頼や完了の報告を行ったり、という経験を(かなりソフトに)叩き込まれます。就職する前に実務に最も近い経験ができて本当によかったですし、メンバーのみんなでひとつのサービスを成長させていく面白さも感じられました。

逆にチーム開発で全く面白味を感じられない場合は、エンジニアとして働いても辛い…というより、別の働き方があるかもしれません。

また、bootcampアプリ自体は筆者がFBCに参加した時点よりも高機能化する一方で、あとに参加すればするほど複雑化したコードを相手にすることになります。なので、プラクティス自体が難化傾向にあると言えます。

(実際の難易度はアサインされるIssue次第なので「難化傾向」です)

(すべてが肥大化する一方というわけではなく、機能が大きく削除されたこともあって、その際はサービスを運営するうえで非常に興味深い議論がなされました)

プラクティス以外の経験

スキルシートに記載するほどではないかもしれませんが、かといって確実に業務で役立つ様々な経験ができます。

たとえばエンジニアとして働くのであれば、フルリモートワークでもハイブリッド出社でも、Slackなどチャットツールでのテキストコミュニケーションに慣れておかなければいけません。ミーティングはGoogle Meet等のビデオチャットで行われることがほとんどでしょう。

そういったスキルは、輪読会、雑談会、モブプロ会、ミートアップといったイベントに参加することで、意識せずとも勝手に養われていきます。

(ちなみに、そういったイベントへの参加は卒業には必須ではありませんし、現職を続けながらFBCに参加している方には定期的なイベント参加自体が難しいです)

また、

  • 日報を書く
  • ブログ記事を書く
  • LTを行う

といったアウトプット経験も積むことができます。

独学でもできないことはないですが、「読んでくれる/聞いてくれる人が確実にいる」状態で、アウトプットのはじめの一歩を踏み出せる機会は稀だと思います。筆者がそうでした。

アドバイザーとして参加されている方や、ドリンクアップ(企業説明会)の参加者様や、地域Rubyコミュニティの方々など、メンター以外の現役エンジニアと話す機会も数多くあります。

個人的に、FBC参加は「Web業界ってどんな感じ?」「エンジニアってどんな仕事?」という疑問に対する解像度を上げていく経験になりました。お金を払ってWeb業界0社目に入社したようなものだと勝手に思っています。

就職

FBCで就職を希望する場合は

チーム開発に並行して就活の準備スタート

→ チーム開発卒業

→ 自作サービス開発

→ 本格的に就職活動スタート

という流れが一般的(2022年12月現在)ですが、筆者は

チーム開発に並行して就活の準備スタート

→ FBCから筆者の条件に合った企業を提示してもらう

→ ドリンクアップ(企業説明会イベント)に参加して、その企業から直接話を伺う

→ その企業からFBC経由でカジュアル面談 or 選考受けないか聞かれる

→ カジュアル面談受ける

→ チーム開発の段階で選考受けてOKの企業だった

→ 自作サービス終わる頃には存在を忘れられてるかもだし選考受けとこ

→ 通った😳

→ チーム開発卒業

→ 自作サービス

→ FBC卒業・就職

という感じでした。

再現性は低そうなので参考程度に。

「プログラミングに興味を持ったきっかけは?」という定番の質問に対しては「『ファイナルファンタジーXII』でプログラミングの原初体験をして〜」という切り口で、プログラミングのどこに興味を持ったかを説明しました。

xtech.nikkei.com

「なんでエンジニアになりたいんですか?」という質問に対しては

  • 在宅で仕事しやすそう
  • 年収も上がりやすそう
  • 知り合いのエンジニアが働いてて幸せそう
  • 単純に仕事がおもろそう

というフワッとした部分は正直に伝え、「単純に仕事がおもろそう」からプログラミングの話に切り替えて回答しました。

ちなみに、この定番質問は就職後もされました。

Webエンジニアとして1ヶ月働いてみて

入社1ヶ月のあいだ、仕事をしながら「FBC参加前の状態で現在のプロジェクトに参加していたら一体どうなっていただろう?」とたびたび想像していました。

最初のタスク

「リリーススピードを優先して_hoge.haml.htmlだけにハードコーディングしているコンテンツがあるんですが、そのコンテンツを各ページでも表示できるよう抽象化してください。」

これが筆者の最初のタスクでした。

(環境構築は置いといて)

コードベースがかなり巨大なので時間がかかりましたが、特有の慣れない挙動や歴史的経緯についての質問を重ねながらも何とか仕上げることができました。

「さすがにそれは事前に勉強してたらわかるやろ😡」みたいな質問はしなかったと思いますし、まる一日先輩に付きっきりで教えてもらうようなことはしませんでした。

僕の考える、Railsエンジニアとして就職できる最低レベルは、「少しでもプラスの戦力として計算できる」というものです。「Issueを一人でこなせる」といっても良いかもしれません。 …「教えるのに大量のパワーが割かれて、居ない方がプロジェクトが進む」という状態がマイナス戦力です。

docs.komagata.org

エンジニアとしてはまだまだですが、FBCを卒業した以上は自身をプラス戦力だと評価しています。

そして、FBC参加前の筆者はマイナス戦力だと断言できます。

マイナス戦力状態の筆者が初タスクに挑戦したら…

  • そもそもタスクの要件が理解できない
  • IssueやPull Requestのスレッドの読み方がわからない
  • Hamlがよくわからない
  • Active Recordを操作できない
  • テストを書こうにもRSpecがわからない
  • RSpecがわかったとしてもテストの観点がない
  • それ以前に環境構築できない

などなど、パッと思いつくだけで大量の即死ポイントが見えてきました。

もうちょっとだけ会社の話

現在筆者はジュニアエンジニアの育成を主な目的としたOJT部署に所属しており、特定のプロジェクトのタスクに取り組んでいます。そのOJT部署のチャンネルで日報を投稿し、技術的な質問や困ったことを表明します。

初日の終わりがけに速攻で分報チャンネルを作成しました。

また、現在のプロジェクトのチームの雰囲気や環境はとてもよいと感じています。

  • Slackのチャンネルにピン留めされているGoogle Meetで各自作業
  • Google Meetを繋ぎっぱなしにする義務はない
  • そのGoogle Meetで作業してると、朝会や定例ミーティングがぬるりと始まる
  • 技術の話で盛り上がる
  • 映画の話で盛り上がる
  • ゲームの話で盛り上がる

「Google Meet繋ぎっぱなし」は常設のもくもく会を毎日やっている感じで、挙手機能があることも後押しし、同期的な質問のハードルが非常に低いです。気分転換に軽い雑談もしやすいので、リモートワークの孤独感はかなり薄いです。

質問のための情報を整理する前に、分報でウンウンうめいている段階で逆に声をかけられて、疑問を瞬殺されるという経験を何度もしました。

どういう経緯で何から影響を受けて成立したのかはまだ存じ上げませんが、チームに「Google Meet繋ぎっぱなし」カルチャーがあることは新人として非常にありがたかったです。

特にくふうを凝らさなくても、自分が助けを求めやすく、周りが自分を助けやすい環境があったのは幸運でした。そのおかげで「今日はぜんぜん進捗がなくてつらい…」みたいな事態には直面しておりません。

少しでも速くエンジニアとして成長することが、この恵まれた環境やチームへの恩返しなのかなと思っています。

とっても参考になるよ

フィヨルドブートキャンプについては色々な方が書かれているので、ぜひ参考にしてください。

明日はfuwa-syugyoさんの記事です。どうぞお楽しみに。

【書評】『プロを目指す人のためのRuby入門 改訂2版』&チェリー本輪読会番外編

こんにちは、チェリー本のおかげでRubyチョットワカルいっしーです。

今回はRuby 3.0に対応した『プロを目指す人のためのRuby入門 改訂2版』(通称チェリー本2)を少しずつ読み進めています。また、本書に登場するサンプルコードに手を加えたものも少しだけご紹介します。

※【書評】と銘打ってますが、『改訂2版』については隅から隅まで精読できておりませんすみません🙏

チェリー本のよいところ

初心者におすすめ

Ruby初心者のみならず、プログラミング初心者にとてもおすすめできます。筆者は本書の第1版を、1周目は通読し、2周目は輪読会に参加して数ヶ月かけて読み込みましたが、そのおかげでプログラミングの地力が相当ついたと思います。

フィヨルドブートキャンプ内で開催されたチェリー本輪読会についてはコチラ↓

isshi-hasegawa.hatenablog.com

「プログラミングの地力がついた」というのはちょっとフワッとした表現ですね。もう少し具体的に述べると、未知のコード(Ruby以外の言語でも)に出会った時に、どれがキーワードで、どれがレシーバで、どれが引数で、コード全体の構造がどのようになっているかなどを冷静に観察できるようになりました。

説明文もコードも読みやすい

入門書として何より大事ですが、説明文が読みやすい日本語で書かれています。また、サンプルコード中に書かれているコメントも過不足なく、そのコードで何が起きているのか理解しやすくなっています。

Rubyを体系的に学べる

「こういう書き方は避けてこのように書くほうが良い」 「こういう書き方は不具合の原因になります」 というふうに、「何が大事で、どのように書くべきか」がキッチリ監修されています。

ただ単にRubyの仕様が知りたいのなら公式リファレンスなどを黙々と読めばよいですが、本書なら伊藤さんというフィルターを通し、Rubyをトピックごとに体系的に学ぶことが出来ます。

テスト駆動開発を実践できる

要件を満たすコードを書く際にどのようなアプローチをとればよいかを手軽に学べます。

例題に取り掛かるセクションでは、

  1. テストコードを記述する
  2. 実装する
  3. テストが通るのを確認する
  4. リファクタリングする
  5. テストが通るのを確認する

というのが基本的な流れになっています。

まるで本書を通じて伊藤さんとペアプロしてるかのような体験です。

読んでいるうちに感じた疑問は、少し先を読めばだいたい書いています。

チェリー本輪読会番外編

フィヨルドブートキャンプでは、早速この改訂版を手に入れた現役生で「チェリー本輪読会番外編」が開催されており、筆者も参加しています。フィヨルドブートキャンプ内で5〜9月に開催されたチェリー本輪読会の、文字通り番外編的なものです。

例題がリニューアルされた8章(モジュール)と、新設された11章(パターンマッチ)をみんなで読もうという趣旨で行っています。

リニューアルされた8章の例題:rainbowメソッド

8章の例題がリニューアルされ、ターミナル上で文字色を変更して出力できるプログラムを作成するというものになっています。

完成品はこんな感じ。 ruby-book_–_rainbowable_rb.png

ANSIエスケープシーケンスという出力形式を利用して、文字色を変更しています。

他にも、背景色を変更したり下線を引いたりすることもできるようです。

ANSI_escape_code_-_Wikipedia.png

輪読会のみんなで改造

せっかくなので、輪読会のみんなと一緒に手を加えてみました。 要件は以下のとおりです。

  1. 背景色も変更される
  2. 色変更の順番は固定でなくランダム
def rainbow
    to_s.each_char.map.with_index do |char, count|
      color = 31 + (0..5).to_a.sample % 6
      bg_color = 41 + (0..5).to_a.sample % 6
      "\e[#{color};#{bg_color}m#{char}"
    end.join + "\e[0m"
  end

おっと、RubyMine(IDE)にペーストしたコードの方はRuboCopに色々怒られています。

ruby-book_–_rainbowable_rb.png

それに、文字色と背景色が被ってしまうと文字が見えませんね。

ruby-book_–_rainbowable_rb.png

もう少し改造

  1. 文字色と背景色が被らないようにする
  2. RuboCopを通す(Warningも対応する)
def rainbow
    to_s.each_char.map do |char|
      ary = (0..5).to_a.sample(2)
      fg_num = 31 + ary[0]
      bg_num = 41 + ary[1]
      "\e[#{fg_num};#{bg_num}m#{char}"
    end.join.concat "\e[0m"
  end

これで完成したと思いきや、被っているように表示されてしまいました。 ruby-book_–_rainbowable_rb.png

どうやらIDEのカラースキームの影響のようです。

プラグインの適用を外すと、うまくいきましたね。 ruby-book_–_rainbowable_rb.png

ちなみにiTerm2ではこんな感じ。問題なく動作しています。 1__irb.png

その他の改訂部分について

もちろん、8章と11章以外の改訂部分も、より表現がわかりやすくブラッシュアップされています。

書籍全体を通しての詳細な差異はシモカワさんの書評を参考にさせてもらってます。

めちゃくちゃ詳しいです↓

aim2bpg.com

また、フィヨルドブートキャンプ卒業生のふーがさんがこの度主催される輪読会メインのコミュニティ「りんどく.rb」でも改訂版の輪読会が企画されています。

詳細はコチラ↓

fuga-ch85.hatenablog.com

チェリー本2はこれから何度も読書会の機会がありそうですね。

映画のディレクターズ・カット版を観るように、差分を楽しみながら他の部分も読みたいと思います。

達人プログラマー輪読会をはじめた話

こんにちは、プログラミング学習をサボって映画ばかり観ているいっしーです。今年は新作・旧作問わず400本ほど観てました。コロナ禍以降ペースが激増しています。

さて、筆者はフィヨルドブートキャンプ内で達人プログラマー輪読会を主催しています。今回は輪読会を主催した経緯や、「輪読会始めてみよう」という話をします。

51W3GJV1X-L.jpg

この記事は、フィヨルドブートキャンプ Part 1 Advent Calendar 2021の9日目の記事として書いています。

Part2はこちらです↓

フィヨルドブートキャンプ Part 2 Advent Calendar 2021

『達人プログラマー』とは何か

あらゆる書籍・ブログ・講演etcで引用されているとてもスゴイ本(語彙力)です。

www.amazon.co.jp

どれほどスゴイかというと、この本の中で提唱された原則や概念、習慣や姿勢は業界で有名になりすぎて、この書籍で提唱されたこと自体忘れられてしまうということが起きています。例えば「プログラマーは毎年1つは新たな言語を学ぼう」という姿勢について書かれていますが、この姿勢のことは覚えていても出典を覚えていなかったケースに2例遭遇しました。どちらも十数年以上前に第1版を読まれたベテランの方でした。

『達人プログラマー』についてより詳しくはコチラ

達人プログラマー 熟達に向けたあなたの旅(第2版)【委託】 - 達人出版会

10年のキャリアを生成する仕事の全体像 - 角谷HTML化計画(2012-11-08)

達人プログラマー 第2版はいいぞ

どこで『達人プログラマー』を知ったのか

角谷さんのFjord Boot Camp as a Gate(角谷トーク2020)で達人プログラマー第1版から聖堂のくだりが引用されていたので、おそらくこの時だと思います。

どうして『達人プログラマー』を買ったのか

銀座Rails#34でt_wadaさんの講演を聞き、興奮冷めやらぬうちに第2版を購入しました。積ん読になるだろうと予想していましたし、実際輪読会を始めるまでは積ん読状態でした。しかし「どうせいつか読むだろう」とも思っていたので微塵も後悔していませんでした。

ちなみに、この講演を聞いた直後の筆者の感想がDiscordに残っていました。

isshi🎬🎥🍿_-_Discord.png

なんだこの感想は…

どうして輪読会を始めようと思ったか

筆者はこれまでいくつかの輪読会(チェリー本、オブジェクト指向でなぜつくるのか等々)に参加する中で、「自分で輪読会を主催すれば、ある程度自分でコントロールできそうな会が作れそう」と考えるようになりました。もちろん、他の参加者に嫌な思いをさせたり不都合を押し付けたりしない範囲で。

チェリー本輪読会に参加した感想はこちら↓

isshi-hasegawa.hatenablog.com

輪読会を始めるきっかけを欲していたところ、アドカレPart1の7日目を執筆されたpofkumaさんが『達人プログラマー』を入手したというツイートに反応して、実際に輪読会をスタートさせるための行動に移りました。

輪読会を始めるために何をやったのか

開催企画を宣伝した

とりあえずDiscordの#randomチャンネルで開催の旨を宣伝しました。 こんな感じ。

random_-_Discord.png

オリエンテーション(第0回)を開催した

  • 毎週何曜日の何時に開催するか?
  • 予習はありかなしか?
  • 参加したい人は自分やpofkumaさんの他にどの程度いるか?

などを決定するために、オリエンテーションを開催する必要がありました。

調整さんを使ってオリエンテーションの日程調整を行いましたが、記入したのは筆者とpofkumaさんの2名のみ🥲 『達人プログラマー』はプラクティスに直接関係のない書籍なので、集まりが悪いのは仕方ありません。

『達人プログラマー』輪読会オリエンテーション___調整さん.png

しかし、オリエンテーションには5名ほど集まってくれました。主催する側としても、「行けたら行く」なノリで参加してもらうほうが気楽だと後から思いました。

まとめページを用意した

HackMDというフィヨルドブートキャンプでよく利用されているMarkdownエディタでまとめページを用意しました。

現在はこんな感じ↓

達人プログラマー輪読会_ノートまとめ_-_HackMD.png

Q&Aに質問を投稿した

フィヨルドブートキャンプのbootcampアプリには質問を投稿できる機能があります。 ※bootcampアプリにアカウントを持っていないと閲覧・投稿・回答はできません。

『達人プログラマー』を輪読会で取り扱うにあたって、読み方などアドバイスをくだ___FJORD_BOOT_CAMP(フィヨルドブートキャンプ).png

質問内容は技術的なものに限らないので、このような質問も可能です。

しかしこの質問にはなかなか回答が付かなかったので、Fukuoka.rbというRubyの地域コミュニティに参加した折にこの件を質問してみたところ、ある方に『達人プログラマー』についてアツく語ってもらえました!しかもその方はフィヨルドブートキャンプのアドバイザーでもあったので、質問にも回答いただけました。

この回答は、業務未経験の立場で『達人プログラマー』を読む際のとてもよい指標になっています。あらためて感謝申し上げます。どんな回答か見てみたい方は、何らかの方法でフィヨルドブートキャンプに参加してみてください。

会場を用意した

Discordのスレッド機能を使って、達人プログラマー専用のテキストチャンネルを用意しました。

達人プログラマー_-_Discord.png

達人プログラマー輪読会用のロールを作成した

フィヨルドブートキャンプのDiscordサーバーでは、@unstoppa61eさんが製作されたマッチングアプリ🧩Botが利用できます。

以下のようにロールを作成し、参加を検討している方に✅を押すよう通知しました。

ロール作成・登録_-_Discord.png

こうすることでrole_達人プログラマー輪読会というロールが付与され、メンションを飛ばすのが楽になります。

達人プログラマー_-_Discord.png

「開催中の輪読会リスト」を更新した

概要が固まった段階で、「開催中の輪読会リスト」というbootcampアプリ内のDocsを更新しました。

開催中の輪読会リスト___FJORD_BOOT_CAMP(フィヨルドブートキャンプ).png

どのように開催しているのか

概要は上記のとおりです。ちょっと特殊で、主催の筆者のみ予習必須としています。

「達人プログラマー輪読会」という名前ですが、実際の進行は輪読会形式ではなく、HackMDに事前に記入しておいた内容を読んだり、それについて参加者同士で話し合ったりしています。

要するに、参加者は予習しなくても(主に)筆者がまとめた該当範囲の要約を聞くだけの参加も可能ということにしています。プラクティスに直接関係しない書籍なので、できるだけ気軽に参加しやすいように、このような形式にしました。

主催である筆者は毎週予習しなければいけませんが、そこまで負担にならないように調整しています。例えば今週末(12/11)はお休みにしています。この記事の作成をじっくり行いたかったのと、プラクティスに充てる時間を確保したかったからです。

よかったこと

『達人プログラマー』を読んでも大丈夫だとわかった

『達人プログラマー』を読む際は、業務経験があるに越したことはないです。抽象的な内容が含まれているので、「具体例はこんな感じかな?」と想像しながら読まざるを得ない箇所が多いですが、面白いエピソードが盛りだくさんで、結構笑いながら読めます。

輪読会が雑談の場になった

毎回、該当範囲を読み終えた後は次回の日程と範囲を決定し、ダラダラと満足行くまで雑談しています。お互いの近況やプラクティスの進み具合、就職活動の話、映画の話(主に筆者)、政治の話(主に筆者)、経済の話(主に筆者)などなど…。好き放題喋り倒すとストレス解消になるので輪読会の場でおしゃべりするのは好きです。

フィヨルドブートキャンプに繋ぎ止めてくれる場になった

筆者は唐突にプラクティスの進捗が悪くなってチャット上での活動も途絶えることがあります。かなり極端ですが、いきなり何もかもやる気を失います。つい先日まで2週間ほどそのような状態でしたが、自分で始めた輪読会の開催だけは必ず行っていました。不思議とそのやる気だけは継続していました。

この経験から、輪読会を開催することでフィヨルドブートキャンプに参加し続ける価値を自ら創ったのだと気づきました。たとえ本来のプラクティスの進捗がなくとも、「達人プログラマーを読み切る」という自分で作ったプラクティスを他の受講生と協力して取り組んでいるようなものです。誰かに命令されたり課されたわけではありません。ゲームの遊び方を自分で見つけたような感じです。

輪読会を主催してみたいあなたへ

輪読会を始めてみたい方は、既に開催されているなんらかの輪読会に一度参加してみて、大体どんな感じで進行しているのか知っておくといいと思います。あとは自分の読みたい本を見つけて輪読会を開催するきっかけを作るだけです。既に開催されている、あるいは過去に開催された会と書籍が被ってもまったく問題ありません。チェリー本の輪読会なんかは常時2~3の輪読会が開催されていてもいいと思ってます。学ぶやる気に溢れている人たちがいて、会場も用意されている。勉強会・読書会・輪読会を行うプラットフォームとしても、フィヨルドブートキャンプはとても良い環境だと思います。

ただし、輪読会を運営すること自体が重荷になってしまっては本末転倒です。主催することになっても、無理のない範囲で、ほどほどの負担になるよう調整してください。

最後に

というわけで、達人プログラマー輪読会にぜひお気軽にご参加ください。あなたがより良いプログラマーを目指していても目指してなくも大丈夫です。雑談だけ遊びに来てもらっても全然オッケーです。フィヨルドブートキャンプのDiscordサーバにいる人なら誰でも歓迎です。お待ちしています。

明日以降もフィヨルドブートキャンプのAdvent Calendarはまだまだ続きますので、引き続きお楽しみください。