はじめに
この度社内業務の一部をChatGPTを利用して効率化、標準化することに成功したので、その開発過程と、生成AIを活用するうえで心がけたことを残しておこうと思います。
以下、著者のスペックです。
- 高校卒業後、官公庁に就職、約5年間国家公務員として勤続中
- 趣味でもともとJavaをいじったことはあった
- 就職後4年半以上はプログラミング業務経験一切無し
きっかけ
詳しい内容は伏せますが、約2ヶ月に一度の周期で必ず作成し、他の省庁に提出するかなり重要な書類を作る業務がありました。この書類に関しては、エクセルの使い方もまともにわからない人がデータを入力し、日付や内容も人によってバラバラ、関数も編集しないといけない、その上入力する人は普段もっと負荷の高い業務を行っており、説明や教育を受ける余裕がないというところが現状でした。
私も元々はその負荷の高い業務を行っていた側の人間でしたが、残念ながらその業務に携わることが無くなったことと、時間的余裕ができたことでこの作業をもっと効率化して信頼性の高いものにすることで、他の人がもっと楽に本業に集中することはできないだろうかと考えました。
今回触った書類についての詳細
- エクセルのファイル
- 参照元のアドレスやシートの入力規則、関数がぐちゃぐちゃ
- 入力するデータは人によって違う(日付、時間などを入力する必要)
- ある程度のフォーマットが規則で定められているため下手に改造することができない
- 他の省庁に提出する重要書類のため極めて高い正確性が必要
おおまかな流れ
まず自分が初めてそのファイルを見たときはあまりにもひどい状態だったので、とりあえず関数や入力規則を統一するところから始めました。
その後、書類に関する規則類を読み、どこまでなら既存のフォーマットを変更してもいいのかを考えました。
どうやら提出する書類はいくつかの部署から同じファイル郡を提出してもらい、それらをニコイチしてエクセルファイルにまとめて書類及びデータとして提出しているようでした。つまり規則上はフォーマットを変更しても問題ないことになっていました
しかしながら大幅なフォーマットの変更は以下のリスクがあります。
- 利用者の利便性が悪化する
- 過去の申し送りを参考にできないため、今までより業務効率が低下する可能性が高い
- ファイルの信頼性を評価してもらえない可能性が高い
- 信頼性を評価してもらえない以上は業務改善をすることが難しい
このように考えたため、できる限りフォーマットは崩さず、プログラム側でどうにかすることにしました。
ChatGPTの活用
VBAなんて一度も触ったことがなかったのと、同期が「ChatGPTで英会話の勉強してる」と言っていた事を思い出し、ChatGPTにプログラムを吐かせればいいのでは? となりました。
結果から言うと、今回のパターンでは大成功でした。
会話のキャッチボールができる
ChatGPTを使用してみて、最も良いと感じた点は、今までした質問を踏まえた上での回答を出してくれるというところです。
例えばSiriなどの音声アシスタントは、「明日の東京の天気は?」って聞いたら「晴れです」って答えてくれて、その後に「じゃあ傘はいる?」と聞けば、今自分がいる場所の情報を返して来ます。これでは会話が成立しません。
生成AIにおいては、「東京の降水確率は低いので必要ないかと思います!」と返してくれます。会話が成立していますね。
つまり、質問を区切りながらしても、ちゃんと学習してくれる という点にあります。
以下は私が実際に投げかけた質問を抜粋したものになります。
- 「A1には名前、B1には日付、C1には名前があって、100行くらいの表がある。これを配列化できる処理をエクセルマクロで組みたい」
→ 具体的なコードが出てくる - 「この配列を日付順にソートして、日付が同じなら名前順でソートして」
→ 改善されたコードが出てくる
こういった質問のやり方をひたすら繰り返して、より複雑な仕様へと改善していくことが可能です。
しかしながら思うはずです。「これくらいなら一度に全部吐かせれば良くない?」と。おっしゃるとおりです。
このやり方には下記のメリット、デメリットがあると思います。
メリット
- あとから見返したときに自分が何を思ってこの仕様にしたのかわかりやすい
- システムの処理の順番をイメージしながら必要な情報だけを抜き取ることができる
- あまりにも複雑な仕様を要求すると全然違うコードが出てくるのでそれを回避できる
デメリット
- 毎回すべてのコードを吐いてくるので、処理時間が長くなる
- 型や命名規則が不規則になりやすい
これらを踏まえ、この質問の仕方を行ったほうが私は途中までのコードを検証しつつ、効率的に時間を使えると思ったため、このような質問の仕方を行いました。
知識を習得するコストを圧倒的に低減することができる
インターネットで調べれば何でもわかる時代といえど、調べるという作業には膨大な時間とコストがかかります。何よりその情報が本当に正しいのかもわかりません。
今回私が求めていたのは「早く完成させて、ちゃんと動くこと」だったのと、「仕様が複雑だから求めてるコードなんて絶対に誰も作ってない」と感じていました。
だからこそChatGPTは「正しいかよくわかんねえけどとりあえずプログラムとしては動くし、たまにエラー吐くかもしれないけどエラーの内容言ってくれたら改善策も出せるぜ!あとは自己責任で好きにいじって」みたいなところが今回のパターンでは非常にマッチしていたのでとても良かったです。
生成AIを活用する上での現実と注意点
コミュニケーションということを意識する
ChatGPTは確かに会話のキャッチボールは成り立ちますが、それは質問者とChatGPTのイメージがマッチしているときです。これは実際の対人での会話でも同じだと思います。
例えば、「ぬるぽ出てるから、hoge1にnull入ってるやつ、Emptyになるように変えて」とかガチ未経験の人に言って伝わると思いますか?伝わるわけ無いですよね。
対人でも「ログにNullPointerExceptionってエラー出たね。じゃあ'hoge1'ってItem型のフィールドがここにあるやん。nullが入っちゃってるからEmptyが入るように直してみよっか」みたいに新人研修とかだと言われるかと思うんですよね。まだ理解できると思います。
こういう「比較的誰にでも理解できる、正確な会話」を意識して使って見ると良いと思います。
結局のところ対象がシステムに変わっただけでコミュニケーションなんですね。
将来性
正直今後もうちの組織ではChatGPTを公に普及させることはないと思います。
- 一般業務で生成AI活用する必要がない
- 内容を学習するという特性上、情報保全的に危険性を拭いきれない
- 利用者のリテラシーが正しく育っていなければ意図しない情報漏洩を引き起こす可能性がある
生成AIは確かに便利だと感じましたが、結局のところ結果を解釈をし、完成に持っていくのは人です。ある程度の知識を持っておかないとすでにある業務の効率を落とす可能性や、規則に反してしまう可能性も十分に考えられます。便利だからといってなんでもかんでも素の状態を質問するということは、辞めておいたほうが良いのではないかと感じました。
まとめ
今回ChatGPTを使ってみましたが、いろいろな知見が増えて非常に良かったと思います。
- 生成AIはあくまでも膨大な情報を調べる時間を削減してくれるツールである
- よりわかりやすい会話を心がけなければ思った通り回答は返ってこない
この2点を意識してみると、プログラミングに限らずとも有用な使い方がもっとあるのでは無いかと思いました。
最後になりますが、私は今後約5年続けた職場を退職し、Javaエンジニアに転職しようと思っています。
退職前に、現職に爪痕を、誰かの役に立つシステムを残してこの組織を去ることができるのは、エンジニアを志した私にとって誇りです。マニュアルは残しといたから少なくとも5年くらいは使ってくれたら嬉しいな~。