6  Step 0: プロジェクトと環境の作成

このステップでは、AI・Git・GitHub と連携しやすく、再現性のある形で Julia プロジェクトを始める。

6.1 目的

ローカルにプロジェクトフォルダを作成し、Git を初期化し、AI 向けの指示ファイルを用意し、GitHub にリポジトリをアップロードし、Julia のプロジェクト環境を作成する。

6.2 到達目標

このステップの終わりまでに、以下が揃っていること:

  • ローカルのプロジェクトディレクトリ
  • Julia 向けの .gitignore
  • ローカル Git リポジトリ
  • AGENTS.mdCLAUDE.md
  • GitHub 上の公開リポジトリ
  • Project.toml
  • Manifest.toml
  • 動作する Julia プロジェクト環境
  • git init が何をするかの基本的な説明
  • gh repo create が何をするかの基本的な説明
  • Pkg.activate(".") が何をするかの基本的な説明

6.3 AI に聞く前に

まず、受講者自身でプロジェクトフォルダを作成し、その中に移動する。

mkdir ising-project
cd ising-project

GitHub CLI の認証がまだの場合は、先に以下を実行する:

gh auth login
# 対話形式で GitHub.com -> SSH -> ブラウザ認証を選択

この講義では、GitHub との接続は HTTPS ではなく SSH を標準とする。

6.4 習得する概念

  • .gitignore
  • git init
  • ローカルリポジトリとリモートリポジトリ
  • gh repo create
  • プロジェクト環境 vs グローバル環境
  • Project.toml
  • Manifest.toml
  • Pkg.activate(".")
  • Pkg.add(...)
  • 再現性

6.5 AGENTS.md と CLAUDE.md について

これから作成する AGENTS.mdCLAUDE.md は、AI アシスタントに対するプロジェクト固有の指示ファイルである。AI がプロジェクトのコードを操作する際に、ここに書かれたルールに従うようになる。AGENTS.md に実際のルールを書き、CLAUDE.md@AGENTS.md と書くだけで AGENTS.md を参照する。このパターンにより、複数の AI ツール(Claude Code、Cursor など)で共通のルールを使える。

6.6 実行スペル 1: ローカル Git と AI 指示ファイル

以下のプロンプトを AI に貼り付ける。

このプロジェクトディレクトリで、Julia向けの .gitignore を作成し、
git リポジトリを初期化し、この講義の AI ワークフロールールを含む
AGENTS.md を作成し、@AGENTS.md とだけ書いた CLAUDE.md を作成せよ。
新しいファイルの正確な内容を示せ。

6.7 説明スペル 1

実行スペル 1 の後に、以下を AI に貼り付ける。

今やったことを説明せよ。.gitignore の役割、git init で何が変わったか、
AGENTS.md に実際のルールがある理由、CLAUDE.md が最小限な理由、
ローカルでリポジトリの状態を確認する方法を示せ。

6.8 実行スペル 2: Julia 環境

カレントディレクトリに新しい Julia 環境を作成せよ。
BenchmarkTools を依存パッケージとして追加せよ。

6.9 説明スペル 2

実行スペル 2 の後に、以下を AI に貼り付ける。

今やったことを説明せよ。どのファイルが作成または更新されたか、
各コマンドやパッケージ操作の意味、プロジェクト環境とグローバル環境の
どちらが変更されたか、結果を確認する方法を示せ。

6.10 実行スペル 3: GitHub へのアップロード

gh を使って、このローカルプロジェクトの新しい公開 GitHub リポジトリを作成し、
最初のコミットを行い、現在のブランチをプッシュせよ。
現在のフォルダ名に基づいた適切なリポジトリ名を使え。

6.11 説明スペル 3

実行スペル 3 の後に、以下を AI に貼り付ける。

今やったことを説明せよ。ローカルの git リポジトリと
リモートの GitHub リポジトリの違い、コミットされたファイル、
gh repo create が何をしたか、リポジトリが公開されたことを
確認する方法を示せ。

6.12 この操作の意味

一つの妥当な手順は以下のようになる:

mkdir ising-project
cd ising-project
git init
using Pkg
Pkg.activate(".")
Pkg.add("BenchmarkTools")
Pkg.status()

想定される使い方:

  1. 自分でフォルダを作成する
  2. 実行スペルを AI に貼り付ける
  3. AI にそのセットアップタスクを実行してもらう
  4. 対応する説明スペルを貼り付ける
  5. 何が変わったかを理解したことを確認する
  6. 次のスペルに進む

この例では、各コマンドは以下のことを行う:

  • mkdir ising-project: プロジェクト用の新しい作業ディレクトリを作成
  • cd ising-project: Julia 環境を作成する前にそのディレクトリに移動
  • git init: カレントフォルダにローカル Git リポジトリを作成
  • using Pkg: Julia のパッケージマネージャを読み込み
  • Pkg.activate("."): カレントディレクトリをアクティブなプロジェクト環境として設定
  • Pkg.add("BenchmarkTools"): 必要なパッケージをこのプロジェクトに追加
  • Pkg.status(): どの環境がアクティブで、どのパッケージがインストールされているか確認

セットアップ後、以下を確認する:

  • .git が存在する
  • .gitignore が存在する
  • AGENTS.md が存在する
  • CLAUDE.md が存在する
  • Project.toml が存在する
  • Manifest.toml が存在する
  • GitHub 上にリポジトリが存在する

6.13 コードリーディング確認

以下を読んで、各部分が何を変更しているか説明せよ。

git init
gh repo create my-julia-project --public --source=. --remote=origin --push
using Pkg
Pkg.activate(".")
Pkg.add("BenchmarkTools")

そして以下の質問に答えよ:

  1. git initgh repo create の違いは何か?
  2. ここでの Pkg.add("BenchmarkTools") は現在のプロジェクトとグローバル環境のどちらを変更するか?
  3. ここでの Project.tomlManifest.toml の違いは何か?
  4. リポジトリなしで @v1.x ですべての作業を行うよりも、なぜこの方法が良いのか?

この例では、gh repo create ... --source=. --remote=origin は以下を意味する:

  • 現在のローカルプロジェクトの GitHub リポジトリを作成する
  • その GitHub リポジトリを origin としてローカルリポジトリに接続する
  • オプションで、現在のブランチを即座にプッシュする

正確なフラグよりも、ワークフローのアイデアが重要である。ローカルで初期化済みのリポジトリを公開しているのであって、無関係なリモートを別に作っているわけではない。

6.14 追加テスト生成プロンプト

Julia リポジトリのプロジェクトセットアップについて、
短いコードリーディング問題を4つ作成せよ。

以下に焦点を当てよ:
- .gitignore の役割
- git init で変わること
- gh repo create の動作
- プロジェクト環境 vs グローバル環境
- Project.toml vs Manifest.toml
- Pkg.activate(".") の動作

まだ答えは出すな。
私が答えた後、回答を採点し、フォローアップ質問を1つ出せ。

6.15 スキップ条件

以下をすでに説明できるなら、このステップはスキップできる:

  • リポジトリに通常 .gitignore が必要な理由
  • ローカル git リポジトリとは何か
  • gh repo create で GitHub に何が作られるか
  • プロジェクト環境を使うべき場面
  • Project.toml に何が記録されるか
  • Manifest.toml に何がロックされるか
  • AI が生成したセットアップコマンドを、グローバル環境ではなくプロジェクト内で実行すべき理由