プログラミングと日々思ったことなど

ブログ名通りです。仕事でプログラミングをはじめました。

Kiroにくだらないプログラムを書かせてみた


※この記事もkiroに書かせました。



## はじめに

AIエージェント型IDEの能力を比較するためのサンプルプロジェクトとして、**ascii-oracle** というCLIツールを作りました。コマンドを実行するとアスキーアートと短いメッセージが表示されるだけのシンプルなツールですが、要件定義・設計・実装・テストまでをAIエージェント(Kiro)と対話しながら進めた過程を記事にします。

    • -

## ascii-oracle とは

実行結果

ターミナルで `python -m ascii_oracle.cli` を実行すると、こんな感じでアスキーアートとメッセージが表示されます。

    • -

## アスキーアートの大元

今回のアスキーアートは**AIエージェント(Kiro)が生成したオリジナル**です。既存のアスキーアートライブラリや素材サイトからの転用ではありません。
↑ホントか?

設計ドキュメントに「オラクル(神託・予言者)をテーマにした視覚的に魅力的なもの」という指示を与えたところ、Kiroが以下の3種類を生成しました。

名前 内容
------ ------
`oracle` 神殿の柱をイメージした枠組みに "ASCII ORACLE" のロゴ文字
`dragon` シンプルなドラゴンのシルエット
`cat` おなじみの猫アスキーアート

`oracle` アートの "ORACLE" 部分はブロック体の文字を手作りしたもので、各行が80文字以内に収まるよう調整されています。

    • -

## 制作の流れ

### フェーズ1:要件定義と設計(約15分)

まず「CLIでアスキーアートとメッセージを表示するツールを作りたい」という一文からスタート。Kiroと対話しながら要件定義書(requirements.md)と設計書(design.md)を作成しました。

設計で決めた主なポイント:

  • **4コンポーネント構成**:`renderer`(アート)・`generator`(メッセージ)・`formatter`(整形)・`cli`(エントリーポイント)
  • **プロパティベーステスト**:`hypothesis` ライブラリを使い、「全文字がASCII範囲内か」「行数制約を満たすか」などを自動検証
  • **外部依存ゼロ**:標準ライブラリ+pytest+hypothesisのみ

### フェーズ2:初期実装(約20分)

タスクリスト(tasks.md)に沿って順番に実装。Kiroが各ファイルを生成し、チェックポイントでテストを実行して確認するサイクルで進めました。

```
タスク1: プロジェクト構造セットアップ
タスク2: renderer.py(get_art関数)
タスク3: generator.py(get_message関数)
タスク4: チェックポイント ← テスト実行
タスク5: formatter.py(format_output関数)
タスク6: cli.py(argparse + main関数)
タスク7: 最終チェックポイント ← 全テスト実行
```

初期実装完了時点で **18テスト全パス**。

### フェーズ3:機能追加(約15分)

「他のアスキーアートやメッセージを表示させるコマンドを教えて」という質問をしたところ、「現在の実装では切り替え機能がない」と正直に回答。「追加してください」と依頼したところ、要件定義・設計・実装まで一気に対応してくれました。

追加した機能:

  • `--art <名前>` オプション(指定なしはランダム)
  • `--message <名前>` オプション(指定なしはランダム)
  • `--list` オプション(利用可能な一覧表示)

機能追加後は **39テスト全パス**。

    • -

## 発生したエラーと修正内容

### エラー1:`pyproject.toml` の `build-backend` が不正

症状:**

```
pip._vendor.pyproject_hooks._impl.BackendUnavailable: Cannot import 'setuptools.backends.legacy'
```

原因:**

Kiroが生成した `pyproject.toml` の `build-backend` に存在しないモジュールパスが指定されていました。

```toml
# 誤り
build-backend = "setuptools.backends.legacy:build"

# 正しい
build-backend = "setuptools.build_meta"
```

修正:** `pyproject.toml` の1行を手動で修正。

    • -

### エラー2:エラーメッセージの文字化け(UnicodeDecodeError)

症状:**

テスト実行時に以下の警告が出ていました。

```
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 0: invalid start byte
```

原因:**

`cli.py` のエラーメッセージに日本語(`エラー:`)を使っていたため、Windows環境でサブプロセスの stderr を UTF-8 として読み取ろうとした際に文字コードの不一致が発生。

修正:** エラーメッセージを英語に変更。

```python
# 修正前
print(f"エラー: {e}", file=sys.stderr)

# 修正後
print(f"Error: {e}", file=sys.stderr)
```

    • -

## 最終的なコマンド一覧

```bash
# 一覧表示
python -m ascii_oracle.cli --list

# アートを指定
python -m ascii_oracle.cli --art oracle
python -m ascii_oracle.cli --art dragon
python -m ascii_oracle.cli --art cat

# メッセージを指定
python -m ascii_oracle.cli --message wisdom
python -m ascii_oracle.cli --message prophecy
python -m ascii_oracle.cli --message warning
python -m ascii_oracle.cli --message blessing

# 組み合わせ
python -m ascii_oracle.cli --art dragon --message prophecy

# ランダム(引数なし)
python -m ascii_oracle.cli
```

    • -

## テスト構成

最終的に39テストが揃いました。

ファイル テスト数 内容
---------- ---------- ------
`test_renderer.py` 9 アート取得・名前指定・ランダム選択・制約検証
`test_generator.py` 7 メッセージ取得・名前指定・ランダム選択・制約検証
`test_formatter.py` 4 整形ロジック・冪等性(プロパティテスト)
`test_cli.py` 19 CLIオプション全般・エラーハンドリング

プロパティベーステストは `hypothesis` を使い、各プロパティにつき100回以上ランダム入力で検証しています。

    • -

## 所感

今回特に印象的だったのは、**「切り替え機能がない」と正直に答えてから追加実装まで一貫して対応できた**点です。単にコードを生成するだけでなく、要件定義・設計・タスク分解・実装・テストという開発サイクル全体をサポートしてくれました。

発生したエラーは2件とも軽微なもので、1件はKiroが生成したコードの問題(build-backend の誤り)、もう1件はWindows環境固有の文字コード問題でした。どちらも原因が明確で修正は数秒で完了しています。

AIエージェント型IDEの比較という目的で作ったプロジェクトですが、「仕様を言葉で伝えてコードを得る」という体験の完成度が想像以上に高く、実用的なレベルに達していると感じました。

    • -

ascii-oracle は AIエージェント型IDE比較プロジェクトの一環として制作しました。*

    • -

ここから人間の書いた文章
実際にかかった時間はkiroでは測れないとのことだったので、始めた時間~記事作成時間まで15:32〜16:42くらいでした。
全体の作業時間約70分くらい。
作成時間を教えると、全体の内訳は
内訳の目安:
要件定義・設計:約15分
初期実装(18テスト):約20分
機能追加(切り替えオプション、39テスト):約15分
動作確認・エラー修正:約10分
記事執筆:約10分
とのことです(kiro)

lsコマンドミスった時(ls)の蒸気機関車が走り出す動作が好きで、kiroにも作ってもらいました。
別のAIエージェント型IDEにも作ってもらいましたが、全く違う表示・作成方法になったので面白かったです。

ねこ~

OSC 2025 Okinawa に参加しました

今年は自作の脚本を舞台化 していたので、技術イベントに参加するタイミングがありませんでした。
そうしてのらりくらり日々と仕事を過ごすうちに、いつの間にか一年経っている…

そろそろインプットしなければ…と思っていたところ、Open Source Conference 2025 Okinawaなるイベントを見つけました。

Open Source Conference 2025 Okinawa(OSC2025 Okinawa)とは?

オープンソースカンファレンスは全国各地で開催されている、オープンソースおよび地域コミュニティの文化祭です。セミナーおよびブース展示で日頃の活動について発表、情報交換を行う集まりです。

今年のOSC沖縄では、今後のOSCとOSPNの方向性を皆さんで考え、認識を共有化出来たらと考えています。
現地参加だけでなく、オンラインでも皆さんのご参加をお待ちしています。

皆様、是非ご参加ください。

オープンソース、知ってるけど強者が多そうで怖い!でもそろそろ技術者として危機感!
まあセミナーとLTだし、取って食われやしないだろ…と思い、参加しました。


当日は用事が押して15時ごろから参加…すみません。
ですが色々なお話が聞けて良かったです。

Scratchをデジタル学習基盤として再定義する試みでは、10代に選挙に興味を持ってもらえるよう、選挙ガチャやクレーンゲームを開発されているお話が聞けました。
またゲーム後は、家庭内や学校でワークが出来る内容があり、1人で行えるゲームから人と話すことへ繋げるながれは良いなと。

2025年のさくらインターネットでは、GPUサーバーの名前高火力が強烈で記憶に残りました。あとスパコンの話とか。
カンファレンスの後、同行者と話したのですがスパコンってスカラ型とベクトル型があるそうで。スカラ型って並列処理なんでAIのデータセンターと同じつくりになるのではないかと。なので、スパコンという言い方も段々使わなくなっていくのかもしれないですね。
AIといえばこんな記事もありました。
IBMのCEOが「AIデータセンターへの設備投資を回収できる可能性はゼロ」と主張 - GIGAZINE
AI大好きじゃなかったんかーい

プリザンターのご紹介では高校生技術者が登壇なさっていました。ローコードといいつつ、API連携が出来ることなども話されてました。
また短い時間ながら、実際のデモまで紹介されていて…これからどんどん吸収して、伸びていくんだろうなあ……。


休憩後はOSC北海道の歴史についてから始まりました。北海道、数百名規模のカンファレンスは行ったことがないのですごいなあと…規模感が全然違う…
Debeziumを利用したデータ活用も面白かったです。データ変更情報をリアルタイムで監視できるのは便利。しかしDBはチューニング・調査が大事だなーと思ったり。
ちょっとずれるんですが最近はポスグレ触ったりしていまして。不要タプルが使用する領域は勝手に返ってくれないのでvacuum処理をして領域を回収しなくてはいけません。DB監視や実行時間の調査は都度行わないといけませんね(というかどのシステムもそう)

蟻の油脂に対する嗜好性についての続報も面白かった!蟻って種類によって油食べるのか…!知らなかった…!
そして最後オープンソースのくだらないプログラム コンテストで、勇気づけられました。まだまだ出来ない領域が多いのですが、楽しみながら自分のペースで、色々な技術にふれていきたいなと。
会場で論語とコンピュータという冊子のお土産までいただいて、終わった後も余韻に浸ることができました。新入社員に是非とも読んでいただきたい一冊です。
技術は先人たちが惜しみなく公開していたからこそ、さらに発展していった歴史があります。今後も敬意を持って携わっていこうと思いました。
slコマンドも良い。くだらないプログラム作りたくなってきました。今月末までに間に合うだろうか…

懇親会は体調の関係で行けずでしたが、次回も参加したくなるお話が満載でした。
運営のみなさま、お疲れ様でした!

BuriKaigi2024に参加しました

出張で富山にいるのでBuriKaigi2024に参加しました。

burikaigi.dev


残念ながらブリ体験は定員に達していたので出来ませんでしたが、面白い話が聞けました。

参加したセッション

・今こそ、ラムダ式を考える
・OpenAIではじまった生成AI開発ふりかえり
・AIさんとの付き合い方
・技術同人誌を書こう-アウトプットのススメ-


今こそ、ラムダ式を考える
発表されていた内容はこちら

聞いていて思い出したのが、SAPの標準汎用モジュールでもラムダが多用されていて、コピーアドオンを作る際にどうしても動きを読まなくてはならず、苦労した記憶があります。(2日くらいかかったはず)

[ABAP] How do I create and use lambda functions (anonymous functions) in ABAP? | CodingQueries

またラムダ式だとコンパイルの過程が違うの知らなかったです。
それでSAPのコンパイルはどうやっているのか気になったのですが、
色々な言語で作られているみたい。

Rifat Hossain's answer to What programming language does SAP use to develop its products? - Quora

SAPをさわっているとコンパイルまで考えなくて良いので、
アセンブラの内容も見れて精進しなきゃなと…この発表もJavaで作っているなんて…


OpenAIではじまった生成AI開発ふりかえり
AIさんとの付き合い方

弊社でもOpenAIを使って業務効率化できないかと話が出ていたので参加しました。
「OpenAIではじまった生成AI開発ふりかえり」では、主にAzure(だったはず)のサービスについての話でした。
うちで使っているのはOpen AI APIなので、実行の画面も異なっていたので面白かったです。

「AIさんとの付き合い方」ではゴミ出し案内サービス導入断念事例が紹介されていました。
生成AI使ったゴミ出し案内サービスの導入断念 香川 三豊市 | NHK | 生成AI・人工知能

二つのセッションを聞いていて考えていたのが、目標の設定と費用対効果を見ていかないと実用できるかわからないなと。
トークンの量によって費用が変動するので、何に使うのが一番効果的なのか試していかないといけないです。


技術同人誌を書こう-アウトプットのススメ-
技術同人誌が置いてあるということもあってのBuriKaigi参加でした。

他の本も気になった…

「LLMのいま」で、ハルシネーションを活用する方法もあるのに驚きました。
また、なかなか一人だと技術同人誌を書く勇気がないので、コミュニティを見つけられてよかったです。
書けそうなネタ探していきたいと思います。

色々なセッションがあり、楽しめました。
スタッフ・登壇者・参加者のみなさまお疲れ様でした。

あとCDataさんのやるはずだったセッションの記事も面白かったです。
今度は是非話を聞きたいです。
Tesla の公式API をPostman から実行し、車両データの取得やエアコンの操作などを行ってみる | CData Software Blog


最後に
来年こそはブリ体験したい

実地棚卸伝票登録について【SAP】

仕事のアウトプット

SAPの棚卸しは3ステップ

棚卸伝票登録(MI31 or BAPI_MATPHYSINV_CREATE_MULT)

検数入力(MI04 or BAPI_MATPHYSINV_COUNT)

棚卸決済(MI24 and MI07)

棚卸伝票登録は伝票のみ、検数入力はされない。
検数入力後に修正がはしることも(BAPI_MATPHYSINV_CHANGECOUNT)

www.stechno.net

ameblo.jp

WCM周りの記事【SAP】

WCM周りの記事を貼り付けていく。

WAP→Work Approval(WCMにリンクされているオブジェクト、作業承認)
WAPI→Work Application Templates(有効化後、任意のオブジェクトタイプの使用を更新する際に、新しい選択オプションによって拡張
WCD→Work Clearance Document(作業クリアランス文書)



ざっくりのフロー
WCM -Business Models & Process flow | SAP Blogs
SAP Work Clearance Management Process Flow - YouTube


作業承認
Work Approval - SAP Documentation

WCMオブジェクト
WCM Object - SAP Documentation

関連テーブル
SAP PM Work Clearance Management Tables and relationships(PM-WCM)
テーブル相関図
Plant Maintenance Tables (PM/CS/QM) | SAP Blogs

HR(PA30)のデータについて【SAP】

HR周りを少しだけ理解したのでメモです。

PA30→HRマスタデータ更新
インフォタイプはテーブルと紐づいている(PA0001とか)

PA13→ポジションを更新する

組織ユニット(ORGEH)
ポジション(PLANS)
ジョブ(STELL)
↑についてはこの記事を読むとなんとなくわかる
SAP HCM Organizational Structure - Free SAP HR Training

今回使ったテーブル
PA0105
PA0000
PA0001
HRP1000

各テーブルの時間制約条件によって、PA30から登録できる時と、エラーになる時がある。
例えばORGEHの期限が1900/1/1〜2021/12/1だとして、従業員の期限がORGEHの期限を上回っていたとしても
PLANS(Position)の期限が9999/12/31の場合だと登録できる(と、解釈している)

時間制約について
SAP Help Portal

あと通信データ(PA0105)の登録時、ユーザ情報の登録が重複エラーになることがある(他の従業員情報で登録されている場合)
その場合は、他の従業員情報の通信データ(ユーザ情報)を削除する。
これは何度でも登録・削除できるから適宜更新していく。

削除は上部のプルダウンから一括削除できる。
個々のインフォタイプに関連する情報だけ削除しようとしても、削除できないときがある。
権限の問題なのか、構造上の問題なのかは不明。

SAPはプログラムが複雑な構造になっているので、全体を理解するのに時間がかかるな・・
けれど嫌いな方ではないので、ひたすらこれだけやってればいいなら続けていきたい(潰しが効かなくなるが・・)

人月の神話

読んだのでメモしたことを記載していく。

p14 見積もりとスケジューリングに使われる「人月」そのものの間違い
  →コストは実際に人数と月数の積に比例するが、進捗はそうではない
p18 往来の方法でスケジュールされたプロジェクトを検証
  →たいていスケジュールの半分がテストに使われる
p19 シェフの例
p23 遅れているソフトウェアプロジェクトへの要員追加は、さらにプロジェクトを遅らせるだけだ
p26 プログラマ の生産性
p28 ミルズの案
p36 コンセプトの安全性
p38 ムーアズ TRAC言語 ALGOL68
   システムにおけるコンセプトの安全性こそが使いやすさを決定するもの

p308 訳語
   アーキテクチャ→外部設計局面
   インプリメンテーション→内部設計局面(実装というときにも使ってそう)
   実現→プログラミング局面

p44 安全に定義されたメモリスペースと機械の実行処理時間の目標
p50 Stretch 二度目のシステムが危ない(セカンドシステム症候群)→機械xにはmbiteとnマイクロ秒の値割当

p51 コアダンプ→実行中プログラムがエラーで強制終了する際にその時点でプログラムが使用してるメモリ空間の内容をまるごと写し取ってファイルに保存したもの
  スナップショット→ある時点のソースこーそやファイル・ディレクトリ・データベース・ファイルなどの状態を抜き出したもの
  インタープリタ→「通訳者」の意。コンピュータでプログラム実行する方法の1つ
  IBM7030(Stretch) IBM最初のスパコン構築の試み

p56 マニュアルとは製品の外部仕様書
p58 バッカスーナウア記法
p60 週次ミーティングと全体会議
p68 バベルプロジェクトの失敗原因→コミュニケーションの欠落
p70 プロジェクト手引書→それぞれに分かれた文書というよりも、プロジェクトが生産する何かについてそれを文書として構造化したもの
p74 才能はさまざまな組み合わせによって、それぞれ違って発揮される
p76 ロバート・ハインライン「月を売った男」
p82 労力 = (定数)× (命令の数)1.5 PERT
p90 プロラムサイズのコントロール

p92 オーバーレイ→物理メモリで処理できないほど大きなプログラムを実行する場合、機能ごとに分類し、細かく管理、制御すること
p93 実現者自身の姿勢の問題がある トータルシステム的な利用者志向の心構えを養うことが、プログラミングマネージャーの最も重要な役割と言えるかもしれない
p100 ソフトウェアプロジェクトのための文書について
p106 システム1つは駄目にするつもりで作成しなければならない
p111 前のリリースで発見された古いバグは、新しいリリースで再び発生する傾向がある
p113 プログラムメンテナンスはエントロピーが増加する過程がある
p116 (ボロクソ)
p121 mcframe
p124 対話型プログラミング→入力のためにIFに対話形式を採用しているプログラム
   高水準言語→人間にとって理解しやすい構文で書かれている言語
p130 コードができあがるずっと前に、仕様書は外部のテストグループへ渡し、完成度と明瞭さについて詳細に調べてもらわなければならない トップダウンのデザイン
p134 対話型デバッグ(1959)
p154 関連文書の重要性
p168 銀の弾を探し求める どこにも見当たらない
p173 ソフトウェア製品はアプリケーションや利用者、慣習および機械機器(媒体)といた文化的マトリックスにはめ込まれている
   偶有的困難⇄本質的困難
  ↑副次的、付随の(p198)
p177 Ada(プログラミング言語
p187 1950〜1960の研究。利用者は給与管理や在庫管理、会計管理などに店頭パッケージを使いたがらないことが示された→その後変化
p190 プログラムは書くのではなく、構築する
p192 わくわくさせる製品

パワポも作ったから機会があれば会社で話す予定。