Vibeコーディングこそ Elixir で練習すると良い理由
どうも、東京だけどfukuoka.exのYOSUKEです。最近は、POの育成やViveコーディングでプロトタイプ作成連発してます。ちなみに、最近リリースしたアプリ Elixirで作ってます。良かったら触ってみてください。
誰でも簡単にアプリからイベント作れるアプリです。
https://lp.eventle.info/
さて、本題ですが、AI時代、システムの開発スタイルが変わりつつあります。
その象徴が Vibe コーディング(Vibe Coding) です。
「こんな感じで動いて」「ここにこういう処理を足して」といった ノリ や 感覚 を自然言語で伝え、
AI がコードを書き、こちらはそれをレビューして育てていく。
これまで “手で書いていたコード” が、徐々に “会話で作るもの” にシフトしています。
ただし、Vibe コーディングはメリットだけでなく、扱い方を間違えると危険でもあります。
だからこそ、最初に練習する言語の選び方がめちゃくちゃ重要 なんですよね。
結論から言うと、
Elixir は Vibe コーディングを学ぶのに最も相性のいい言語のひとつ です。
この記事ではその理由を、実例と実践知を交えながら解説します。
1. Vibe コーディングとは何か(ざっくり)
Vibe コーディングを一言でいうと、
“雰囲気で伝えて、AI と協働でコードを育てるスタイル”
です。
• 設計書を細かく書く → ×
• まず動くものを作る → ○
• 自然言語で仕様を追加 → ○
• 部分改修を AI に依頼 → ○
• 人間はレビューと微調整に専念する → ○
という、プロトタイピングやスピード重視の開発に向いたアプローチ。
ただしその裏では、
• AI が変なコードを書く
• 少し修正しただけで全体を書き換える
• 言語の文脈を理解できず OOP 的コードが混入
といった事故も起きやすい。
つまり、
「AI が雑に書いても壊れにくい言語」
「自然言語での部分修正が安全にできる言語」
を選ぶことが重要になります。
そこで Elixir です。
2. Elixir が Vibe コーディングと相性が異様にいい理由
理由1:関数型パラダイムだが “純粋関数ほど厳しくない” 絶妙なバランス
Elixir は関数型言語であり、
• イミュータブル
• 副作用が少ない
• 関数の境界が明確
といった “壊れにくいコードの構造” を自然に作れます。
一方、Haskell ほど純粋関数を強制しないため、AI 生成コードにも優しい。
関数型のメリットだけ取りつつ、AI が書いても動く適度な柔軟性がある。
これが大きい理由の1つです。
理由2:パイプ演算子(|>)が自然言語と相性抜群
Vibe コーディングでは、こう指定することが多いです:
このデータを整形して、フィルタして、ソートして、最後に JSON にして。
すると Elixir ではこうなる:
data
|> normalize()
|> filter_valid()
|> sort()
|> to_json()
この “処理の流れがそのまま見える” という構造が
AI にとって壊しにくいし、人間にとってもレビューがしやすい。
そして何より、
• 中間処理の追加 → パイプ1行追加
• 中間処理の削除 → パイプ1行削除
• パラメータ修正 → 該当関数だけ修正
という 局所変更のしやすさ が、Vibe コーディングにマッチします。
理由3:自然言語で“限定的な修正”を指定しても壊れない
Vibe コーディングで一番事故が起きるのはここ。
「ここだけ変えて」と言ったのに、AI がプロジェクト全体を書き換える問題
Elixir は関数型+パイプライン構造のため、
• 修正範囲が明確
• データはイミュータブル
• 関数は副作用が少ない
という性質があります。
そのため、
「sort を降順に変更して」
「このバリデーションだけ強くして」
「ここに1ステップ処理追加して」
といった“限定的な自然言語修正”が非常に成功しやすい。
AI が作業しやすい構造であり、
人間がレビューしやすい構造でもあります。
理由4:BEAM(VM)が堅牢なので AI の雑なコードでも壊れにくい
Elixir は BEAM VM のおかげで、
• 軽量プロセスが大量に動く
• 隔離されたプロセスモデル
• 障害に強い
• 例外が局所化される
という特徴を持ちます。
これにより、AIが少し雑に書いたコードでもシステムが落ちない。
「多少雑でも動く」のは Elixir の強み。
Vibe コーディングは“ラフに作って試す”ので、ここはかなり相性がいいです。
3. ただし、Elixir には独自の注意点もあり!
メリットだけ書いても嘘になるので、ここは正直に書いておきます。
注意1:Elixir は他言語ほどサンプルが多くない
AI の学習データにおけるサンプル量は
JavaScript / Python / Java / TypeScript ほど多くありません。
そのため、コンテキストを渡さないと、
• OOPライクな “Elixir っぽくないコード”
• コンパイルが通らない “嘘コード”
• 再代入前提の書き方でイミュータブル性を壊す
などの事故が起きます。
Elixir らしい書き方を最初にこちらから指示する必要があります。
例:
• 「Elixir らしく関数型で書いてください」
• 「パイプ演算子(|>)を積極的に使ってください」
• 「クラスや継承は使わず、モジュールと関数で構成してください」
これだけで精度が大きく変わります。
注意2:AIの出力をそのまま信用しない(必須)
Elixir が壊れにくいとはいえ、AI の出力は
• 型がおかしい
• 足りない関数を呼ぶ
• モジュール配置が現実と合わない
• 依存関係を書き忘れる
など、普通にあります。
必ず人間のレビューが必要です。
「AIは、優秀なインターンや新人」くらいの認識でペアプロしてるくらいの気持ちでやりましょう。
結論:Elixir は “AI と協働する時代の言語” として最適
まとめると、
• 関数型だけど厳格すぎない → AI生成コードが壊れにくい
• パイプ演算子で処理構造が明確 → 自然言語指示と親和性が高い
• 部分的な修正を安全に行える → Vibe コーディングに最適
• BEAM が堅牢 → ラフなプロトタイプでも落ちにくい
• 注意点はあるが、コンテキストを渡せば AI の精度は上がる
つまり、
Vibe コーディングをするなら、Elixir は“最高の相棒”になり得る。
スピードと柔軟性、そして壊れにくさ。
AI と協働する新しい開発スタイルを身につけるには、
Elixir はまさにうってつけの言語です。
え、Elixirを学びたくなった? そんな方は気軽にご連絡くださいw