GitHub CLIとAGENTS.mdで「自律駆動のAIエンジニア」をローカル環境で実現する

2025年の9月に、GPT‑5-Codexが登場してから、OpenAI Codexがすごく便利だ。

It’s more steerable, adheres better to AGENTS.md instructions, and produces higher-quality code—just tell it what you need without writing long instructions on style or code cleanliness.

GPT‑5-Codexはより指示に従いやすく、AGENTS.md のガイドに忠実で、高品質なコードを出力します—スタイルやコードのクリーンさに関する冗長な指示を書かずとも「必要なこと」を伝えれば動きます。

OpenAIがこう述べているように、従来のコーディングエージェントとは異なり、AIが暴走しないように細かい指示や工夫をせずとも、簡単な依頼で高度な実装ができるようになっている。

この性能で、月額20ドルのChatGPT Plusプランでも利用できるのだから驚きだ。

最近は、仕事でも個人開発でも、Codexを使い倒している。

この記事では、私が最近ハマっている、CodexにGitHub CLIを使わせてGitHubと連携する開発手法について書きたい。手法としては、Codex以外のコーディングエージェントに対しても応用可能だと思う。

AIに人間のように自律的に開発してもらいたい気持ち

仕事でもプライベートでも、やることが非常に多く、忙しい中で、AIには、人間に仕事を依頼するときと同じように、できるだけ丸投げに近い形で、自律的にタスクをこなしてもらいたい気持ちがある。

その点で、私はDevinのユーザー体験が好きだ。Devinは「完全自律型のAIエンジニア」を標榜している、クラウドサーバーで動作するタイプのツールで、GitHubのIssueを指定して依頼すると、PR作成まで全自動で進めてくれるような機能性になっている。

CodexにもDevinのようにクラウドサーバーに開発環境をセットアップする機能が存在するが、Devinとは異なり、Docker Composeを使えないなど、実用面で今ひとつ機能が足りない印象がある。現在のCodexは、手元のローカル環境で動かす使い方がメインになるだろう。

その一方で、ローカル環境で動かすツールだとしても、GitHub CLIを使えば、人間のようにGitHubを読み書きする自律的な開発が可能になると気づいた。

以下はGitHub CLIがインストールされていて、ghコマンドが動作する環境を前提とした説明になる。

ghコマンドを活用した依頼

ghコマンドを使ってissue 123の実装をしてください

ghコマンドが動作する環境では、デフォルト設定のCodexでも、上のように依頼すれば、GitHubと連携した開発が可能になる。

これだけでも便利だが、設定ファイルのAGENTS.mdに、依頼に使えるプロンプトと作業内容を定義することで、よりまとまった量の作業を簡単に依頼できるようになる。

AGENTS.mdでのプロンプト定義

## 作業依頼のプロンプト

### Issueの開発

```text
develop issue <ISSUE_NUMBER>
```

このように依頼された場合は、以下を実行します。

- ghコマンドで指定された<ISSUE_NUMBER>のissueの内容を確認します
- 開発用のGitブランチを新しく作成します
- 開発します

### PR作成

```text
create pr
```

このように依頼された場合は、以下を実行します。

- ghコマンドでprを作成します

### コードレビュー

```text
review pr <PR_NUMBER>
```

このように依頼された場合は、以下を実行します。

- ghコマンドで<PR_NUMBER>のprのコードレビューをします

AGENTS.mdにこのように書いておくと、 コーディングエージェントに依頼する際に、以下のようなプロンプトが動作するようになる。

# #123のIssueを開発する
develop issue 123

# PRを作成する
create pr

# #123のPRをコードレビューする
review pr 123

# &&でプロンプトをつないでもいい感じに解釈してくれる
# #123のIssueを開発してPRを作成する
develop issue 123 && create pr

GitHub利用に関する運用ルールの追加

ただし、これだけでは現場の開発ルールに従ったアウトプットができないので、以下のように、GitHub利用に関する運用ルールをAGENTS.mdに追加する。

## Git運用

- `feature/` から始めるブランチ名とします
- コミットメッセージはConventional Commitsのスタイルとします

## GitHub PR作成

GitHubのPR作成を指示された場合は、以下の方針でPRを作成します。

- タイトルは開発対象のIssueと同じとします
- PRの説明を記載します
- `Resolves` の記法を用いて開発対象のIssueと紐づけます
- assigneeに実装者を指定します

開発環境セットアップ・構文チェック・テスト実行のコマンド整備

また、開発環境のセットアップや構文チェック、テスト実行のコマンド群も記載しておくと、AIが自律的に自らのコードの正しさを検証できるようになる。

例えばRailsアプリケーションをDocker Composeで動かす場合は、以下のような記載になるだろう。

## コマンドの実行方法

Rails関連のタスクを実行する際は、ローカル環境で直接コマンドを実行せず、常にDocker Compose経由でコンテナ内のアプリケーションにアクセスします。

## コマンドリスト

- Install: `docker compose run --rm app bundle install`
- Migrate: `docker compose run --rm app bin/rails db:migrate`
- Lint: `docker compose run --rm app bin/rubocop`
- Test: `docker compose run --rm app bin/rspec`

AGENTS.mdの全容

ここまでの内容をまとめると、以下のようなAGENTS.mdファイルになる。

# AIコーディングエージェント向けのガイドライン

## コマンドの実行方法

Rails関連のタスクを実行する際は、ローカル環境で直接コマンドを実行せず、常にDocker Compose経由でコンテナ内のアプリケーションにアクセスします。

## コマンドリスト

- Install: `docker compose run --rm app bundle install`
- Migrate: `docker compose run --rm app bin/rails db:migrate`
- Lint: `docker compose run --rm app bin/rubocop`
- Test: `docker compose run --rm app bin/rspec`

## Git運用

- `feature/` から始めるブランチ名とします
- コミットメッセージはConventional Commitsのスタイルとします

## GitHub PR作成

GitHubのPR作成を指示された場合は、以下の方針でPRを作成します。

- タイトルは開発対象のIssueと同じとします
- PRの説明を記載します
- `Resolves` の記法を用いて開発対象のIssueと紐づけます
- assigneeに実装者を指定します

## 作業依頼のプロンプト

### Issueの開発

```text
develop issue <ISSUE_NUMBER>
```

このように依頼された場合は、以下を実行します。

- ghコマンドで指定された<ISSUE_NUMBER>のissueの内容を確認します
- 開発用のGitブランチを新しく作成します
- 開発します

### PR作成

```text
create pr
```

このように依頼された場合は、以下を実行します。

- ghコマンドでprを作成します

### コードレビュー

```text
review pr <PR_NUMBER>
```

このように依頼された場合は、以下を実行します。

- ghコマンドで<PR_NUMBER>のprのコードレビューをします

まとめ

このような設定をすることで、GitHubのIssueに開発チケットを起票してAIに依頼するだけで、開発がドンドン進む環境が手に入る。もう昔の開発スタイルには戻れないな、という感じがしている。

短歌投稿サイトUtakataのMCPサーバーを作ってみた

最近Web開発業界で、「MCPサーバー」というものが注目されている。自社で管理している任意の情報システムと生成AIツールを連携できるような仕組みとして、活用の可能性が模索されているようだ。

簡単に実装できそうな様子があったので、まずはプライベートで実験してみたいと思って、自作の短歌投稿サイトUtakataと連携するMCPサーバーを作ってみた。

MCPサーバーの構築に興味はあるが、やり方がよく分からないような方の参考になるように、作り方を紹介してみる。

今回やったこと

  • UtakataのRailsアプリケーションに、ユーザーごとの短歌の一覧をJSONの配列で返すAPIを作成する
  • ローカル環境で動作するMCPサーバーを構築し、ユーザーごとの短歌の一覧を取得するToolを作成する
  • Claude DesktopにMCPサーバーを登録し、AIとのチャットでユーザーの投稿短歌についてやりとりできるようにする

GitHubリポジトリ

今回作ってみたMCPサーバーの実装を、動作確認できる形でGitHubに公開している。

Utakataにユーザーごとの短歌一覧APIを作成

今回のユースケースでは、MCPサーバーから、連携するアプリケーションのAPIをリクエストして情報を取得する仕組みだ。

そのためのAPIをまず用意する必要がある。以下のようなJSONの配列を返すAPIを作ってみた。

GET /api/users/:user_id/posts

[
  {
    "id": 25401,
    "published_at": "2021-05-15T17:39:00.000+09:00",
    "tanka_text": "片耳にマスクをかけて池の面をながれる風に呼応している",
    "likes_count": 32
  },
  {
    "id": 23563,
    "published_at": "2021-03-29T13:45:16.888+09:00",
    "tanka_text": "人びとの残りをもとめ散る花の上を歩いてゆく鳩の群れ",
    "likes_count": 17
  }
]

RailsでのAPIの実装方法の紹介は今回の本筋でないので省略するが、興味がある方はGitHubに公開されているUtakataの実装を参考にしてみて欲しい。

MCPサーバーの実装

公式のSDKが用意されているので、これを使って開発するのがお手軽だ。現状5種類の言語に対応されているようで、今回はtypescript-sdkを用いて、Node.js環境で動作するように実装する。

SDKのREADMEで、Resources, Tools, Promptsという3つの概念が紹介されていて、使い分けの理解が難しい印象があるが、試行錯誤してみて、Claude Desktopと連携して使う用途では、Toolとして作っておくのがお手軽に実行できて良さそうだった。

index.jsのファイルを作成し、以下のように、 fetch-user-tanka のToolを実装する。

Node.jsのfetchでUtakataのAPIから情報取得し、JSONの配列を整形して以下のようなテキストをアウトプットする仕組みだ。

# ユーザーID: 5 の短歌一覧(最新順)

- 片耳にマスクをかけて池の面をながれる風に呼応している(投稿日時: 2021-05-15T17:39:00.000+09:00、いいね数: 32)
- 人びとの残りをもとめ散る花の上を歩いてゆく鳩の群れ(投稿日時: 2021-03-29T13:45:16.888+09:00、いいね数: 17)

MCPサーバーの動作確認

MCP Inspectorという便利なツールが公式で用意されていて、ローカルで動作確認できる。

npx @modelcontextprotocol/inspector node index.js

Claude Desktopとの連携

MCPサーバーの動作確認ができたら、あとは生成AIツールと連携して使ってみるだけだ。MCPサーバーとの連携に対応している任意のツールと連携可能だが、今回はClaude Desktopと連携して使ってみる。この記事ではMacの環境で確認した結果を紹介する。

まずは、Claudeのデスクトップアプリケーションをインストールする。

公式ドキュメントに記載の方法を参考に連携設定する。Macの場合、Claudeのアプリケーション内の設定ではなく、Macのヘッダーメニューの「Claude > Settings > Developer」から該当メニューに辿り着く必要がある。「Get Started」ボタンを押すと設定ファイルが ~/Library/Application Support/Claude/claude_desktop_config.json のように作成されるので、エディタで編集してMCPサーバーとの連携設定を追加する。

{
  "mcpServers": {
    "utakataTankaReader": {
      "command": "/Users/fuyu77/.nodenv/shims/node",
      "args": [
        "/Users/fuyu77/mcp-utakata/index.js"
      ]
    }
  }
}

私の環境では、上のような設定で動作した。nodeコマンドとjsファイルのパスは、個別の環境の値に置き換える必要がある。

この設定を保存して、Claudeのアプリケーションを起動すると、Utakataの情報を参照したAIとのやりとりが可能になった。

TypeScriptでの実装

説明を簡単にするために、この記事ではJavaScriptでの実装で紹介したが、TypeScriptで実装してビルドする方法が上の公式ドキュメントに解説されている。

まとめ

MCPサーバーの実装はこのように簡単にできて、任意の情報システムと生成AIツールとの連携が可能になるので、業界で大いに注目されているのも頷ける印象だ。

Utakataの投稿短歌についても、この仕組みを活用して何か面白いことができるかも知れない。もしUtakataのMCPサーバーの活用について何かアイディアがある方がいれば、連絡先に記載のXアカウントのDMや、メールアドレスに連絡いただきたい。

ブログを書けなくなった

このブログに2024年に投稿された記事が1つもない。

ブログを書きたい気持ちがなくなった訳ではなく、人知れず下書きを書いてみたりはしているのだけれど、どうにもとりとめのない内容になってしまって、形にならない。諦めて放置するのも残念な感じがするので、開き直ってブログを書けないというブログを書いておくことにした。

まず、最近は仕事を頑張りすぎている、これが大きい。

仕事を頑張っているのだから仕事論を書けば良いのでは、となったりするのだけれど、無駄に長く書いた挙句に「この内容だったらその辺の仕事本を読んだ方が良いのでは」となったりしている。

ブログっていうのは、生活上の雑感をサラッと主観的に書くのが合ってるんだよな。

今年も仕事を頑張る部分は変わらなそうだけれど、極端に入れ込まずに、生活を充実させる部分もやっていきたい気がする。

仕事でソースコードのコメントを英語で書くべきか

今年の1月から新規立ち上げの開発部署でチームリーダーをやっていて、色々と「俺の考えた最強の開発手法」的なものを試しているのだけれど、その一環で、日本語でなく英語でコミットメッセージやソースコードのコメントを書くという開発ルールを導入してみた。

その結果、メリットよりもデメリットが大きいことが判明して、チームとして英語で書くのをやめにしたので、その振り返りを書きたい。

英語でコメントを書くメリット

  • Web開発の世界でグローバルな共通語として機能している
  • 日本語入力に切り替える必要がないので、タイピング効率が良い
  • 文法的に日本語よりもロジカルに書きやすい
  • GitHub CopilotやChatGPTのような生成AIのツールとの相性が良い
  • RuboCopのRSpec/ContextWordingのように、英語利用を前提としたルールを提供しているLinterがある

当初このような点をメリットとして想定して、英語で書いてみたいと考えて、チームメンバーに相談してみたところ、特に英語ルールにネガティブな意見がなかったので、英語で書いてみることにした。

英語の確認に不毛な工数が発生

始めてみると、そもそもの話として、英語を読んだり書いたりすることが好きなのがチーム内に私しかいないということが浮き彫りになって来た。

主語、目的語、動詞の並びが間違っているなどの初歩的な文法ミスが高頻度で出現し、コードレビューが英作文教室のようになってしまった。また、通常のプログラミング上の観点などと違って、指摘しても次回以降も文法ミスがなくならず、英語のライティングというのは長期的な積み重ねが大事なスキルで、短期的な向上が難しいという性質も明らかになった。結果的に、英語の文法確認というプロダクト開発上まったく非本質的な観点に大きな工数を割く必要が出てしまった。

コメントの量と質にも悪影響が

コメントの量と質にも英語による悪影響があった。まず英語に対する苦手意識から、コメントの量が本来必要な水準に対して少ないということが起きた。また、処理の背景の説明を、英語では上手く表現できないということもあった。

日本語を解禁することに

このように、コメントを書く目的に対して、英語利用にはクリティカルなデメリットがあったので、基本的に日本語で書くように方針転換した。

その結果、コメントの量と質が改善し、レビュー負担も減って、快適になった。日本語を解禁してみると、英語必須のルールは手枷足枷をはめて仕事をしているようなものだったと思える。

とは言え英語を書きたいという気持ち

その一方で、「英語禁止」までルール化してしまうと、それはそれでつらいのではという気持ちがある。Web開発という仕事は、世界の開発者と英語でつながっていることに大きな魅力があると感じるためだ。英語を書ければ、OSSコミットなどは若干ハードルが高いとしても、開発者コミュニティやQ&Aサイトなどで、世界の開発者とちょっとした交流をするのは誰でもできるだろう。

また、上にも書いたように、英語を読む、書く、話すスキルの向上には長期的な積み重ねが必要で、日々の開発で英語を書くことをやめてしまったら、システム開発の英語ライティングのスキル向上はなくなってしまう。実際にグローバル企業で働くかどうかは別にしても、Web開発者をやる以上、「世界」とつながっている感覚をもって日々の仕事に取り組みたい気持ちが個人的にはある。

という事情があり、個人的なエゴを押し通して、コメントは各自で書きたい言語で書いて良い、ということにしてしまった。

まとめ

日本の現場で、コメントを英語に統一するルールを導入することには大きなデメリットがあり、基本的にはやめた方が良いということが分かった。

私の場合、それでも英語を書きたいので、何語で書いても良いということにしてしまったけれど、それで本当に大丈夫なのかどうかは、もう少し運用して確認してみたい。

2023/09/19追記

この記事ははてなブックマークコメントで総叩きになってしまった。コメントの内容を受けて記事の見解の修正と、経緯の補足について追記したい。

英語への未練は捨てます

後半の英語への未練を書いている部分は誤りだったと率直に認めたい。 私自身も日本語コメントで書くべきなのは確かにその通りだと思った。

経緯の補足

当初このような点をメリットとして想定して、英語で書いてみたいと考えて、チームメンバーに相談してみたところ、特に英語ルールにネガティブな意見がなかったので、英語で書いてみることにした。

この記事の上の書き方だと、何もないところから急に私が英語を強制したかのように読めることに自分で書いていて気づけなかった。

あまり仕事の話を詳しく書くのもどうかと思って、端折って書いてしまったけれど、元々新規の開発部署の前身の部署が、オフショアの開発メンバーも参加する関係で、コメントを英語で書いていた。新しい開発部署となり、オフショアの開発会社との契約も切れて、チームメンバーが日本人だけになり、改めてコメントの言語をどうしようかとなったときに、英語が望ましいと考えて、英語ルールを提案したところ、チームメンバーから「今までも英語だったし、英語で良さそう」との反応が得られて、英語で統一することにしてみた、というのが詳しい経緯だ。

ただ、前身の部署ではそもそもコメントへの意識が低かったので英語でも何となく回っていたのが、新しい部署でテストコードのシナリオなどをちゃんと書くようにしてみると、英語コメントのデメリットが際立って感じられるようになったという訳だ。

ブログを書くときは実際にあったことを簡略化・抽象化して論旨が明確になるように書くことが多いけれど、省略のしかたによっては明後日の方向にメッセージが伝わってしまうことがあると、改めて書き方の難しさを感じた。

MarkdownメモアプリのObsidianを使ってみたら評判通り捗った

最近やたらと絶賛されているMarkdownメモアプリのObsidianを使ってみたら、なるほど、これは便利だ、という感じなので、使い勝手について書きたい。

ちょっとしたメモの整理に便利

仕事でも日常生活でも、わざわざ文章にまとめて公開する程ではない、ちょっとした思いつきやToDoのようなものをメモしたいときがある。そんなとき、私は今まで仕事ではSlack、プライベートではTwitterの自分宛てのDMを使ってメモを管理していた。

ToDoの管理量を最小限にして、すぐに行動に移して消化する、という点ではセルフDMでのメモ管理もあながち悪くなかったのだけれど、如何せん機能が貧弱すぎた。TwitterのDMではメッセージの編集すらできない。

そんなちょっとしたメモの管理先として、Obsidianは圧倒的に便利だ。

関心ごとにファイルを分けて、見出しを付けるだけでも随分と整理された感じになるし、後から参照しやすい。Markdownでメモの構成をいじり回しているだけでもアイディアが頭の中で整って来る。

複数のMarkdownファイルを管理できるツールの選択肢は他にもいくらでもあるだろうけれど、ObsidianはアプリのUIが秀逸で、何だか色々と書いてみたい気持ちになる。

はてなブログの記事の下書きも、はてなブログのWebエディタで書くよりも、Gitで差分管理しつつObsidianで書いた方が捗ると思って、GitHubにアップしてみた*1

iCloudなどのクラウドストレージで同期する手段はありつつ、ローカルで使うことをベースにした硬派なアプリのObsidian、シンプルな機能性で生活に寄り添う様子は、何処かイマドキの他のアプリケーションにはない魅力がある。

*1:最近までMarkdownではなくはてな記法で記事を書いていたのが悔やまれる。既存記事の記法は後から変更できない。

RailsのTurboでGA4のページビューが少なく計測されてしまう問題を解消する

Google Analyticsで2023年7月1日からUAの計測ができなくなり、GA4への移行が必須になるということで、個人で開発している短歌投稿サイトUtakataもGA4に移行したのだけれど、移行した途端にページビューの値が極端に減少してしまうという事態に遭遇した。結論から言うと、RailsのTurbo利用のサイトで正しく計測するために、UAのときとは異なるイベント送信が必要という原因だったのだけれど、関連ワードでググっても(Turboの利用者数が少なすぎるのか)解決記事の類が出てこなかったので、この問題の解決方法を書いておく。

UA時代のTurbo対策

UA時代からTurbo利用でページビューを正しく測定するには一工夫必要だった。

上のような形でturbo:loadをeventをトリガーにgtag関数を実行しないと正しくページビューが計測されない。

GA4でのTurbo対策

GA4移行に際して、上のUAタグをただGタグに置き換えただけだと、ページビューが少なく計測される問題が発生した。

GA4の開発ドキュメントに記載のある、ページビューイベントを別に送信する処理を追加するとこの問題は解決された。

余談 ―UA時代のUtakataのページビュー振り返り―

UAで記録していた2019/01/14〜2023/06/30までのUtakataのページビューの遷移の上のようになっている。今年に入ってから猛烈に伸びていて、最近では毎日4000前後のPVがあるところまで成長した。

この伸びは、最も人気があった短歌投稿サイト「うたよみん」のサービス終了による代替サービスとしての需要が大きい。

とは言え、Utakataもまた、多くのユーザーに支持され、日々使っていただけていることも事実だ。

Utakataは新卒で入った会社を逃げるように辞めて、Webエンジニアになるための勉強をしていた頃にリリースしたサービスで、コツコツと開発を続けて言語やライブラリのバージョンも最新にアップデートしているので、最初は滅茶苦茶なRailsアプリだったのが、今ではHotwire(Turbo + Stimulus)利用のRails 7のアプリケーションとしてそれなりに真っ当な実装になっていると思う。コツコツと継続していることに結果がついてくるのはやはり嬉しいものだ。

日本株個別投資で損した100万円を米国株インデックス投資で取り戻した

6年前にほぼ全財産の500万円で日本株の個別投資を始めたけれど、その結果は最大で100万円以上の損失を抱える大失敗に終わった。

退場がちらつく中、思い切って米国株インデックス投資に切り替えたところ、徐々に損失が補填され、今月になって評価額ベースでトータルプラマイゼロの500万円のラインまで戻すことができた。これまでの経緯を振り返りつつ、日本株個別投資の難しさと、米国株インデックス投資を行う具体的な方法について書きたい。

日本株個別投資の難しさ

そもそもの話として、インデックス投資が個別投資に対して優位性があるというのは有名な話で、ましてや素人が個別株投資を行って長期的にインデックス投資よりも優れた成績を出すのは非常に難しい。とは言え、インデックス投資にはロマンや賭け事としてのゲーム性がないのもまた事実だ。当時の私は自分だけは上手くいくはずという、この上なく見通しの甘い期待を抱きながら日本株個別投資を始めたのだった。

その結果は、東証株価指数TOPIX)がプラスに遷移している期間で約20%の損失を出すという大失敗に終わった訳だけれど、経験的に日本株個別投資の何が難しかったかを書いておきたい。ちなみに投資スタイルとしては、PER、PBR、ROEのような指標を元に割安と思われる銘柄のうち、直近の業績が安定している銘柄に投資していた。ベンチャー系のハイリスク銘柄には一切手を出していない。保有期間は本決算を参考に投資対象を変えるスタイルだったので、1年以内で売買することが多かった。

指数に対して大きく上がる機会は少ないが、大きく下がる機会は頻繁にある

個別株投資をやっていると、個々の銘柄の日々の値動きに実は大差なく、ほぼ指数と同じような動きをしていることに気づく。指数に対して明らかに優位にグングン上がっていくことを目にすることはほとんどない。その一方で、特定の銘柄だけ短期間に大きく下がるイベントは割とある。その分かりやすい例に増資発表がある。増資をすると1株あたりの価値が下がるため(株式の希薄化)、増資発表の直後に株価の暴落が起きる。増資で資金調達するというのは会社の事業にとってネガティブという訳ではないけれど、それでも株価はアホみたいに下がる。ポートフォリオでの保有比率が大きい銘柄が短期間に10%以上の損失を出してしまうと、その損失を補填するのは地道で困難なものになる。

分析指標は実際役に立たない

PERやPBRのような割安性を示す指標は理解が簡単で何か上手く使えそうな雰囲気を出しているけれど、実際有効に機能したと感じることは少なかった。色々な銘柄を買ってみて、本当に大きく下げた銘柄はほとんどなかったので、指標が割安な銘柄は底堅いとは一定言えそうだけれど、指標が割安であることと株価が上がることには特に関係がなさそうだった。素人が決算公開後の指標の分析をして何か望ましい結果を得られるというのは絵空事なのだろう。

むしり取られる税金

株を売却して利益を確定すると、利益のうち約20%が税金として取られる。普通に特定口座で取引していて確定申告を行わない場合、損失確定による税金の還付が年内でしか行われないため、利益確定と損失確定を繰り返して、トータルで損しているのに税金はいっぱい払っているという状態になり得る。私の場合、100万円損している一方で、税金も何十万円と納めているというアホみたいな状態だった。

日々の相場の人智を越えた動き

何か取引をしようと注文して、特定銘柄の買値と売値の注文の入り方の動き(板)を見ていると、明らかに人ならざるものが介在しているように見える、ダイナミックかつ狡猾さを感じさせる動きに畏れを抱くところがあった。素人が短期トレードに手を出そうものならいいようにハメ込まれるのは想像に難くない。

損しているのに投資にたくさん時間を使っている馬鹿らしさ

これらの難しさに対して、色々と売買ルールを変えたりして、実際のところ無意味な対処策を工夫していたのだけれど、損しているのに投資に時間をたくさん使っているのもいかにもアホっぽい感じがしていた。

得られた教訓

このような経験を通して、インデックス投資が個別投資に対して優位性があるというよく知られた事実を、体感を伴う形で納得することができた。また、税金や手数料などのコストを考えると、可能な限り売買回数を少なくして長期で保有するのが手堅い方法と言えるだろう。

米国株インデックス投資を始める方法

という訳で、インデックス投資を始めようとなったのだけれど、インデックスと言っても何のインデックスに投資すれば良いのかがまず悩ましい。私は世界中からスーパーエリートが結集して、最先端技術で常に世界経済をリードするアメリカの株のインデックスに投資したいと思った。アメリカ株のインデックスの代表的なものと言えば、S&P 500、ダウ平均、ナスダック100などがあると思うけれど、その中でもS&P 500は、アメリカの代表的な500銘柄の時価総額加重平均ということで、分かりやすく、いかにもインデックスらしいインデックスということで、S&P 500に投資してみることにした。と言ってもインデックスそのものに投資できる訳ではないので、S&P 500に連動する何らかの投資商品を選ぶ必要がある。

ETFを買うのが分かりやすく効率的

ETFと呼ばれる上場している投資信託があって、普通の株と同じように市場で売買できるので、証券口座を開設してすぐにサクッと購入できる。また、通常の投資信託と比べて、信託報酬が安くなる傾向があり、効率的な投資先と言える。

どの銘柄を買うか

S&P 500に連動するETFの中でも、運用会社の違いによって種類があって、私は当初、最も古参の日興アセットマネジメントのもの(1547)を買っていたけれど、最近ではブラックロック・ジャパン(1655)や三菱UFJ国際投信(2558)のものの方が信託報酬が安く優位性がありそうだ。

買い方

今の価格が安いか高いかというのは誰にも分からないので、何も考えずにドカッと買って、何が起きても売らずに放置し、ETFには分配金があるので、分配金が入ったら買い足すなどして適当にやるのが良いと思う。

まとめ

そもそもの話として、S&P 500連動ETFを100%で運用している点にまた大きな失敗の予兆がある気がするけれど、納得感のない投資をしても面白くないので、しばらくはアメリカを信じて買い続けてみようと思う。