忍者ブログ

プログラミングの練習

プログラミングの問題やプログラミング関連知識、ソフトウェアのテストについてのブログです

【git】ローカルリポジトリの作成と保存場所・最初のコミット手順(init / add / commit / log)

バージョン管理システム「Git」を使い始める際の第一歩が、ローカル環境でのリポジトリ初期化とファイルのコミット(保存)です。

今回は、ターミナル上でリポジトリを作成し、ファイルの作成・ステージング・コミット・履歴確認(git log)を行うまでの一連の流れをまとめました。


リポジトリの実体が「どこに作成され、どこに保存されているのか」といった仕組みや、途中で発生しやすいエラーへの対処法もあわせて解説します。(Mac環境で検証)





1. リポジトリの初期化(git init)とテストファイル作成

作業用のディレクトリで Git による管理を開始し、確認用のテキストファイルを作成します。


  • ① リポジトリ作成とファイル生成

    git init で空のリポジトリを作成し、echo コマンドで hello.txt を用意します。

    ~$ git init

    Initialized empty Git repository in /path/to/project/.git/



    ~$ echo "hello" > hello.txt

    ~$ ls

    hello.txt



2. ステージング(git add)とコミット(git commit)

作成したファイルをインデックス(ステージングエリア)に追加し、リポジトリに変更内容を記録(コミット)します。


  • ② ファイルの追加(git add)

    git add hello.txt を実行してファイルをステージングします。

    ~$ git add hello.txt

  • ③ コミットの実行(git commit -m)

    -m オプションでコミットメッセージ(今回は "First")を指定して記録を確定させます。

    ~$ git commit -m "First"

    [main (root-commit) 2b1541e] First

     1 file changed, 1 insertion(+)

     create mode 100644 hello.txt



3. コミット履歴の確認(git log)

記録されたコミットが正しく保持されているか、ログを確認します。


  • ④ ログ確認コマンド

    ~$ git log

    commit 2b1541e4b2a6bd079bde29088144ba5ac58c89e6 (HEAD -> main)

    Author: username <user@example.com>

    Date: Sun Aug 30 10:41:41 2026 +0900



    First

    コミットハッシュ、実行者情報、日時、メッセージが記録されたことが確認できました!


【解説と補足ポイント:リポジトリの保存場所と仕組み】



■ リポジトリはどこに作成されて保存されているのか?

git init を実行した「現在の作業フォルダ(カレントディレクトリ)内」に、すべてのデータ管理用フォルダが作成されます。



・実体は隠しフォルダ .git

git init を実行すると、フォルダ直下に .git という名前の隠しディレクトリが自動生成されます。Gitで管理されるすべての変更履歴やコミットデータはこの .git ディレクトリ内部に保管・蓄積されます。

・隠しフォルダを確認するコマンド

通常の ls コマンドではドット(.)から始まるファイルは表示されませんが、ls -a(または ls -la)を実行すると .git の存在を確認できます。

~$ ls -a

. .. .git hello.txt


・現在の作業フォルダ(リポジトリの絶対パス)を調べる

「今自分がどのパスのフォルダでリポジトリを作成したか」を確認したい場合は、pwd コマンドを実行します。

~$ pwd

/Users/username/project_folder






■ よくあるエラーとその理由

・fatal: pathspec 'add' did not match any files

git add add hello.txt のようにコマンド名を重複して入力した際に発生します。「add という名前のファイルが見つからない」という意味のエラーです。

・Aborting commit due to empty commit message.

git commit をメッセージ指定(-m)なしで実行し、エディタ上で文字を入力せずに終了した場合に発生します。

・fatal: your current branch 'main' does not have any commits yet

まだ1度もコミットしていない状態で git log を実行した際のエラーです。最初のコミット完了後に正常表示されます。



■ ユーザー名とメールアドレスの設定警告について

初回コミット時に「Committer / Author」に関する長い英文メッセージが出力されることがあります。これはGitにユーザー設定が行われていない場合の自動補完警告です。以下のコマンドで自身の名前とメールアドレスをあらかじめ登録しておくと警告を非表示にできます。

~$ git config --global user.name "Your Name"

~$ git config --global user.email "your_email@example.com"



4. まとめ

Git による基本的なローカル管理は、「git init(初期化)」 $\rightarrow$ 「git add(ステージング)」 $\rightarrow$ 「git commit -m(保存)」 という3ステップが基本となります。


リポジトリの実体は作業フォルダ内の隠しフォルダ「.git」の中に全て保存されています。パスが分からなくなった時は pwd コマンドで位置を確認し、ls -a で .git の存在を確かめてみましょう。


PR

【awk】特定の列を出力する基本操作($1, $2, $0 の使い方)

awk(オーク)では、渡されたテキストデータを「列(フィールド)」単位で自動的に分割して処理します。

今回は、デフォルトの区切り文字(スペースやタブ)における列の指定方法と、行全体を表す $0 の使い方についてまとめました。





1. サンプルデータと基本コマンド

まずは、以下のようなスペース区切りのテキストファイル(input.txt)を用意します。


  • ① 確認用ファイル(input.txt)

    abc def ghi



2. 実行例(列の指定方法)

$1(1列目)、$2(2列目)、および $0(全列・行全体)を指定して出力結果を比較します。


  • ■ 1列目だけを出力する場合($1)

    ~$ cat input.txt | awk '{print $1}'

    abc

  • ■ 2列目だけを出力する場合($2)

    ~$ cat input.txt | awk '{print $2}'

    def

  • ■ 行全体(すべての列)を出力する場合($0)

    ~$ cat input.txt | awk '{print $0}'

    abc def ghi

【解説と補足ポイント】



■ デフォルトの区切り文字

-F オプションを指定しない場合、awk は「連続する半角スペース」および「タブ文字」を自動的に区切り文字(フィールド区切り)として扱います。



■ $0 と $1, $2... の違い

・$1, $2, $3 ... : 分割された各列の値を保持します。

・$0 : 分割される前の「入力行全体(元の文字列そのまま)」を保持します。



■ 複数列を組み合わせる小ワザ

print $1, $3 のようにカンマ区切りで記述すると、1列目と3列目をスペース区切りで連結して出力できます。

~$ awk '{print $1, $3}' input.txt

abc ghi



3. まとめ

awk において「$1 から順に番号が振られること」と「$0 は行全体を表すこと」は、すべてのデータ加工の基本となる重要知識です。


ログ抽出やコマンドの出力結果をフィルタリングする際に一番よく使う記法ですので、しっかりとマスターしておきましょう!



アルゴリズムの基本!擬似コードの読み方・書き方ルール総覧

アルゴリズムの試験対策やプログラムの設計で頻出する「擬似コード」の基本的な文法ルールをまとめました。




1. 入出力(Input / Output)


  • Input:〇〇

    入力や関数の引数などを記述する


  • Output:〇〇

    出力や関数の返り値を記述する



2. 制御構文(ループ・条件分岐)


  • for 変数 = 値1 to 値2 do
          処理
    end for

    変数の値を、値1から値2まで、1ずつ増やしながら処理を実行する


  • while 条件 do
         処理
    end while

    条件が真の間、処理を実行する


  • if 条件 then
       処理1
    else
       処理2
    end if

    条件が真ならば、処理1を、真でなければ、処理2を実行する


  • return 値

    関数の返り値として、値を返す



3. 演算子と配列


  • 値1 == 値2 (比較演算)

    値1と値2が等しければ、真。そうでなければ、偽


  • 値1 != 値2 (比較演算)

    値1と値2が等しくなければ、真。そうでなければ、偽


  • 条件1 and 条件2 (論理演算)

    条件1と条件2が、ともに真のとき真


  • 条件1 or 条件2 (論理演算)

    条件1か、条件2のいずれかが、真のとき真


  • 変数 = 値(代入演算)

    変数に値を代入


  • 配列名[添字]

    配列の添字番目の要素


【Java×AI】ニュートン法で √5 を秒速で計算する!Aiderを使ってアルゴリズムを実装・検証する方法

前回の記事に続き、今回もAiderとGeminiを活用した「Java×バイブスコーディング」の実践編です。


今回は、数値計算アルゴリズムとして有名な「ニュートン法」を取り上げ、AIに指示して一瞬で √5(ルート5)を求めるプログラムを作成しました。数式の仕組みから実際のコード、実行結果まで詳しく解説します。




1. ニュートン法とは?(アルゴリズムの仕組み)

ニュートン法とは、方程式の解($f(x) = 0$)を近似的に求める反復法の一つです。関数のグラフにおける接線を利用して、驚異的な速さで真の解に近づいていくのが特徴です。


  • ① √5 を求める漸化式への変形

    $x = \sqrt{5}$ の両辺を2乗して移項すると $x^2 - 5 = 0$ となります。これにニュートン法の公式を適用すると、次の漸化式が導かれます。


    x_{n+1} = (x_n + 5 / x_n) / 2

    現在の予測値 $x_n$ と「5を割った値」の平均を次々と計算していくことで、あっという間に √5 に収束します。



2. プロジェクトディレクトリの作成とAiderの起動

まずは今回のサンプル用ディレクトリを作成し、Gitの初期化とAiderの起動を行います。


  • ② ターミナルでの起動コマンド

    ターミナルを開き、以下のコマンドを順番に実行します。


    # 1. 仮想環境の有効化

    ~$ conda activate aider-env


    # 2. プロジェクトフォルダの作成と初期化

    ~$ mkdir java-newton-sample

    ~$ cd java-newton-sample

    ~$ git init


    # 3. Aiderを起動(Gemini最新モデルを指定)

    ~$ aider --model gemini/gemini-3.6-flash


3. バイブスコーディング(AIへの指示)

Aiderが起動したら、ニュートン法の実装をAIに丸投げします。


  • ③ Aiderへのプロンプト例

    プロンプト( > )が表示されたら、以下のように指示を出します。


    > Mavenを使って、Java 21でニュートン法により「√5」を計算するサンプルプロジェクトを作って。

    > 収束判定は「前回と値の差がほとんどなくなったら(Math.abs(next - current) < 1e-15)」または「最大100回」のループにして。

    > 初期値は適当な数(例: 2.0)から始めて、計算の経過がコンソールに出力されるようにして。

    > pom.xml には mvn compile exec:java で実行できるように設定も入れて。

    ※ AIが自動で pom.xml とプログラムを生成し、Gitコミットまで完了させてくれます。



4. 生成されたソースコードと解説

AIによって自動生成された実際のJavaコード(NewtonMethod.java)は以下の通りです。


  • ④ NewtonMethod.java の中身
    package com.example;

    public class NewtonMethod {
    public static void main(String[] args) {
    double target = 5.0;
    double current = 2.0; // 初期値
    double epsilon = 1e-15;
    int maxIterations = 100;

    System.out.println("√" + target + " の計算(ニュートン法)を開始します。");
    System.out.printf("初期値: %.15f%n", current);
    System.out.println("--------------------------------------------------");

    for (int i = 1; i <= maxIterations; i++) {
    // ニュートン法の更新式: x_{n+1} = (x_n + target / x_n) / 2
    double next = (current + target / current) / 2.0;
    double diff = Math.abs(next - current);

    System.out.printf("ステップ %2d: current = %.15f, diff = %.15e%n", i, next, diff);

    if (diff < epsilon) {
    System.out.println("--------------------------------------------------");
    System.out.printf("収束しました (%d 回の反復)。%n", i);
    System.out.printf("計算結果: %.15f%n", next);
    System.out.printf("Math.sqrt(5) の値: %.15f%n", Math.sqrt(target));
    return;
    }

    current = next;
    }

    System.out.println("--------------------------------------------------");
    System.out.println("最大反復回数に達しました。");
    System.out.printf("最終計算結果: %.15f%n", current);
    }
    }

【ソースコードのポイント解説】

■ 収束判定と無限ループ防止

前回との差分(diff)が十分小さくなった場合(diff < epsilon)にループを抜ける設計になっています。また、安全策として最大反復回数(maxIterations)も設けています。


■ 驚異的な精度と速度

たった5回の反復で、Javaの標準ライブラリ(Math.sqrt(5))と完全に一致する精度に到達していることが確認できます。




5. 実行結果とまとめ

Aiderを /exit で終了させた後、プロジェクトディレクトリでMavenコマンドを実行します。


  • ⑤ 実行結果(mvn compile exec:java)

    √5.0 の計算(ニュートン法)を開始します。

    初期値: 2.000000000000000

    --------------------------------------------------

    ステップ 1: current = 2.250000000000000, diff = 2.500000000000000e-01

    ステップ 2: current = 2.236111111111111, diff = 1.388888888888884e-02

    ステップ 3: current = 2.236067977915804, diff = 4.313319530746540e-05

    ステップ 4: current = 2.236067977499790, diff = 4.160138900033417e-10

    ステップ 5: current = 2.236067977499790, diff = 0.000000000000000e+00

    --------------------------------------------------

    収束しました (5 回の反復)。

    計算結果: 2.236067977499790

    Math.sqrt(5) の値: 2.236067977499790

    実行すると、わずか5ステップで正確な解に収束していく様子が美しく出力されます。

数学的なアルゴリズムの実装も、バイブスコーディングを活用すれば一瞬でコード化して動作を検証できます。ブログのコンテンツとしても非常に見応えのあるテーマですので、ぜひご活用ください!



【Java×AI】JavaDocもAIにお任せ!Aiderを使ってドキュメント付きコードを秒速で自動生成する方法

前回の記事に続き、今回もAiderとGeminiを活用した「Java×バイブスコーディング」の実践編です。


プログラム開発では欠かせないドキュメント化ですが、AI(Aider)を使えば「JavaDocコメント付きのきれいなコード」を一瞬で自動生成させることができます。今回は、シンプルな「Hello World」アプリを題材に、JavaDocの書き方とAIへの指示のコツをまとめました。


※動作確認環境:macOS 26.6.2




1. プロジェクトディレクトリの作成とAiderの起動

まずは今回のサンプル用ディレクトリを作成し、Gitの初期化とAiderの起動を行います。


  • ① ターミナルでの起動コマンド

    ターミナルを開き、以下のコマンドを順番に実行します。


    # 1. 仮想環境の有効化

    ~$ conda activate aider-env


    # 2. プロジェクトフォルダの作成と初期化

    ~$ mkdir java-javadoc-sample

    ~$ cd java-javadoc-sample

    ~$ git init


    # 3. Aiderを起動(Gemini最新モデルを指定)

    ~$ aider --model gemini/gemini-3.6-flash


2. バイブスコーディング(JavaDocの指示)

Aiderが起動したら、JavaDocコメントを含めるようにAIへ具体的に指示を出します。


  • ② Aiderへのプロンプト例

    プロンプト( > )が表示されたら、以下のように指示します。


    > Mavenを使って、Java 21で「Hello, World!」と出力するプロジェクトを作って。

    > Appクラスとmainメソッドには、必ず正式なJavaDocコメント(@author や @version、メソッドの説明など)を記述して。

    > pom.xml には mvn compile exec:java で実行できるように設定も入れて。

    ※ AIが自動で pom.xml とドキュメント付きソースコードを生成し、Gitコミットまで完了させてくれます。



3. 生成されたソースコードとJavaDocの解説

AIによって自動生成された実際のJavaコード(App.java)は以下の通りです。


  • ③ App.java の中身(JavaDoc対応)
    package com.example;

    /**
    * Hello, World! を出力するメインアプリケーションクラスです。
    *
    * @author Developer
    * @version 1.0.0
    */
    public class App {

    /**
    * アプリケーションのエントリーポイントです。
    * コンソールに "Hello, World!" メッセージを出力します。
    *
    * @param args コマンドライン引数
    */
    public static void main(String[] args) {
    System.out.println("Hello, World!");
    }
    }

【JavaDocコメントのポイント解説】

■ クラスレベルのドキュメント

/** ... */ で囲まれた部分がJavaDocです。@author や @version タグを用いることで、クラスの作成者やバージョン情報を明文化したきれいなドキュメントを自動生成するベースになります。


■ メソッドの仕様説明と引数の明記

メソッド側でも、処理の概要に加えて @param タグで引数の意味をしっかり記述する癖をAIに自動化させることができます。




4. 実行結果とまとめ

Aiderを /exit で終了させた後、プロジェクトディレクトリでMavenコマンドを実行します。


  • ④ 実行結果(mvn compile exec:java)

    Hello, World!

    実行結果はもちろん正常にメッセージが出力されます!

バイブスコーディングを活用すれば、面倒なコードのコメント書きやドキュメント整備も含めてAIに丸投げできるため、品質を落とさずに開発速度を爆発的に高めることができます。