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

今年の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%で運用している点にまた大きな失敗の予兆がある気がするけれど、納得感のない投資をしても面白くないので、しばらくはアメリカを信じて買い続けてみようと思う。

AIアシストで人間が強化される世界線についての所感

前回の記事で書いたように、個人的にChatGPTに相談することは、既にGoogle検索と同じくらい生活の中で当たり前の行為になっている。このまるで魔法のような応答を見せるツールを使っていて、感じたことが色々とあるので、書いておきたい。

知的探求のツールとしての使い方にこれまでと大きな違いがある訳ではない

わたしは、それまで自分の精神のなかに入っていたすべては、夢の幻想と同じように真でないと仮定しよう、と決めた。しかしそのすぐ後で、次のことに気がついた。すなわち、このようにすべてを偽と考えようとする間も、そう考えているこのわたしは必然的に何ものかでなければならない、と。そして「わたしは考える、ゆえにわたしは存在する〔ワレ惟ウ、故ニワレ在リ〕」というこの真理は、懐疑論者たちのどんな途方もない想定といえども揺るがしえないほど堅固で確実なのを認め、この真理を、求めていた哲学の第一原理として、ためらうことなく受け入れられる、と判断した。

情報の真実性を吟味する上で、様々なソースや実験などを通じて多角的に疑った上で、確かに真実らしいと思える事柄を、(将来的に反証され得る)事実と仮定し、その仮説の上に更なる仮説を積み上げる、デカルトの方法的懐疑に基づく演繹法が、近代以降の知的探求のベースとなる方法論と言えるだろう。

翻ってChatGPTの場合は、有益な情報を答えてくれることが多い一方で、hallucination(幻覚)と呼ばれる、まったくの架空の内容をそれらしく回答してくる現象も頻繁に発生する。この真実性にムラのあるアウトプットに対応する上で、従来の方法的懐疑が変わらず有効に機能すると気づく。具体的には、ChatGPTの回答を鵜呑みにせず、使用者が自ら裏取りを行う必要がある。

このように、性質の違いこそあれ、知的探求を補助する従来のツールと、使い方の方法論の部分では決定的な違いが出て来る訳ではないため、GPT-4を本格的に使い始めてまだ1か月も経っていないけれど、生活に浸透するレベルで使いこなすことができている。

動作原理がサッパリ分からない

率直に言って、私はGPTやLLMの動作原理をまったく理解できていない。技術的な難易度が極めて高いこともあるし、識者の解説記事を読んでみても、人によって言っていることがバラバラで、多少なりとも真っ当な理解にいたるまでのハードルが非常に高く感じる。

最近はChatGPTのアシストを受けて、普段使っているプログラミング言語Rubyの言語仕様を掘り下げて理解したり、RubyのライブラリのRailsソースコードを読み解いたりしているけれど、「訳の分からないものを使って、訳がちょっと分かっているものを、より分かるようにする」というのは、何だかこれまでにない不思議な体験のように感じる。

労働者が楽になる訳ではなさそう

AIアシストによって知的生産性を上げた上で、これまでと同じ時間働いたとすると、労働の密度が上がって疲労度が高まると思われる。

"I’m very optimistic that we could increase productivity," he said in an interview at a conference in Glasgow. "We could increase our well-being generally from work and we could take off more leisure. We could move to a four-day week easily."

グラスゴーで開催されたカンファレンスでのインタビューで彼(ノーベル経済学賞受賞者のクリストファー・ピサリデス)は、「私は生産性を向上させることができるだろうと非常に楽観的に考えています」と述べた。「私たちは仕事から得られる幸福感を全般的に向上させ、より多くの休暇を取ることが可能になります。週4日制に簡単に移行できるでしょう」

そろそろテクノロジーの進歩で実際に労働時間が減る世界観を実現したいものだ。

現状様々な格差を生んでいる

現時点でのChatGPTは、様々な観点で格差を生んでいるように見える。

アメリカの一部企業に技術が集中している

元々現代のIT先端技術はアメリカ企業に集中している印象があるけれど、AIツールの現状は、アメリカの一線級の起業家が集って開発中止を求めるほど、アメリカ企業の中でも特に、OpenAIとその出資元のMicrosoftに知見が集中している。

「倫理的な面でたくさんの懸念があります。一番問題なのは、世界で数えるほどの企業だけが、これらのAIを開発し、提供するリソースを持っているということです。中立的でもなければ、民主的でもない。究極的には、彼らの利益につながるようにつくられています」

「こうした企業は、膨大なデータとクラウド設備、そして(米グーグルの)Gメールや(米メタの)フェイスブックを通じてデータを抽出し続けるための巨大な消費者市場を持っています。いま話題のAIは、こうした資源と権限の集中の結果として生まれてきたもので、技術的な革新の成果ではありません。しかし、『魔法みたい』『人間より賢い』『いろんなことに使える』という誇大宣伝が、正確性も安全性もわからない実験的な技術を、正当化することに利用されています」

このような懸念はもっともなことで、ただのツールのユーザーとして一喜一憂しているのは、いかにも踊らされているような感覚もある。

日本のICTは結局、本質的につらいことをやっていないのです。OS、ネットワーク、セキュリティ、クラウド技術といった現代社会の基礎を作ってこられた世界中の方々は、みんなつらいことをやっているのです。問題に直面して頭脳を使って自分たちで考え、解決してきたのです。

ただし、日本人として言うと、基盤となるような技術開発の分野で遅れていて、アメリカ企業の製品のユーザーの立場に終始してしまっているのは何もAIに限った話ではなく、これは根深く如何ともしがたいことのようにも思える。

特定のジャンルが重点的に学習されている

極めて広範囲な知見を回答可能で、ソースコードの出力も流暢に行えるIT領域は、明らかにOpenAIによって重視され、重点的に学習されているように思われる。他のジャンルで使うと、IT領域ほどには有用な感じがしないのが現状だ。

AIツールを使いこなすために使用者にその分野の知見が要求される

hallucinationが頻繁に起こる性質と関連して、自分が一定以上得意なジャンルで使わないと、適切に質問することもできなければ、回答を吟味することもできない。得意なジャンルをより得意にすることには使えても、サッパリ分からないジャンルを分かるようにするためには使いづらいと言えるだろう。

有効なツールの利用に課金が必要

無料のGPT-3.5と、月額20ドル課金して使えるGPT-4では、hallucinationの起きづらさや入力可能な文字数の観点で、機能性に決定的な差がある。一般的なサブスクサービスと比べても、20ドルはやや高く、課金を躊躇する人も多いだろう。今後有用な課金ツールが多数出現する場合には、どれに課金するかの取捨選択も適切に行う必要が出て来そうだ。

学習に発展途上国の人材が搾取されている可能性がある

実際に作業を担当したケニア人の労働者は「幼い子どもが見ている中で犬とセックスする男についての文章を読み、繰り返し起こる幻覚に苦しみました。あれは拷問です。そういった文章を1週間を通じていくつも読むことになります」と語っています。給料は年功序列と業績に基づいて決められており、時給1.32ドル(約170円)から2ドルだったとのこと。

ChatGPTのポジティブで人間に忠実なキャラクター性の構築が、発展途上国の人材の搾取の上に行われているとしたら、それは恐るべき不公正と言えるだろう。

格差の解消への尽力が求められる

Second, market forces won’t naturally produce AI products and services that help the poorest. The opposite is more likely. With reliable funding and the right policies, governments and philanthropy can ensure that AIs are used to reduce inequity. Just as the world needs its brightest people focused on its biggest problems, we will need to focus the world’s best AIs on its biggest problems.

市場の力によって、貧困層を支援するAI製品やサービスが自然に生まれることはない。むしろ、その逆の可能性が高い。信頼できる資金と適切な政策があれば、政府や慈善団体は、AIが格差を解消するために使われることを保証することができる。世界がその最大の問題にフォーカスするために最も優れた人々を必要とするように、世界最高のAIを最大の問題にフォーカスさせる必要がある。

ビル・ゲイツが「AIの時代は機会と責任に満ちている(The Age of AI is filled with opportunities and responsibilities.)」という言葉で締める上の文章が示唆するように、一部の最先端企業の自由競争にすべてを任せるのではなく、非営利かつ国際的な枠組みで格差解消に向けた活用を模索する動きが将来的には必要になって来るだろう。

おわりに

以上、現状のChatGPTについて思うことを書いてみた。AIツールのこれからの発展が何だか怖いような気持ちもする一方で、この驚くべき技術の大衆への普及の開始点に、ユーザーとして立ち会えたことに新鮮な喜びを感じている。これから先、どのような未来が待っているのだろうか。「歴史」として思いを馳せるような激動の時代が、実は今私たちが生きているこの時代こそ、まさにそうだったのだと振り返るときが来るのかも知れない。

ChatGPTをWeb開発の現場で便利に使う方法

最近ChatGPTに月額20ドルの課金をして、GPT-4を使っている。Webアプリケーション開発の仕事で、情報漏洩の観点から、業務情報をインプットに一切含めない範囲で使っているけれど、それでも明らかに知的生産性や技術の学習効率に、これまでの世界観が変わるほどの違いを感じているので、有効に使えるユースケースの紹介と、便利に活用する方法について書きたい。

有効なユースケース

業務で有効性を確信したユースケースと、応答例を紹介したい。これらのユースケースは、特にプロンプトの工夫なく、自然な日本語のやりとりで活用できる。

ラクティスの相談

特定のプラクティスのメリット・デメリットの整理や、どうしてそうするのかの理解の深堀りに使える。

実装方法の相談

一定以上メジャーな言語やライブラリの実装方法を相談すると、かなり込み入った要件でも、サンプルコードを示して解説してくれる。エラーメッセージを入力すると、エラーを回避できる実装案を回答してくれたりもする。

シェルコマンドや各種設定ファイル、正規表現などの解説

Webサイト上に公開されているシェルコマンドや各種設定ファイル、正規表現などをコピペして解説させると、直に読み解くよりも素早く、深く理解できることが多い。シェルコマンドを解説させた後に「実行例を教えてください」と聞いたりすると、まるで実際に動かしたかのように実行結果のサンプルを回答してくれて驚く。

文章の要約、英文の翻訳

GPT-4はかなりの入力文字数を許容するため、英語の記事を丸ごとコピペして要約させたりすると、記事の概要がザックリと把握できて便利だ。

上手く使うコツ

回答の生成中に他の作業を進める

GPT-4は回答の出力速度が遅いので、回答を生成させつつ、ブラウザの他のタブで別の作業を進めて、後で結果を確認すると、効率的に作業を進められる。

掘り下げて質問する

同じスレッドの範囲では過去のやりとりを参照してくれるようなので、掘り下げて質問を繰り返すことで、有効な回答を引き出せるケースが多い。

過去のやりとりを活用する

AIがスレッドのやりとりの内容を要約したタイトルを自動で付与して、過去の回答履歴を保存してくれる。読み返す以外にも、過去のスレッドに新たに質問を追加することも可能なので、その話題について後から気になったことを質問して掘り下げることが可能だ。

注意点

出鱈目を回答する可能性がある

しかし、LLM chatbotに限らず例えば機械翻訳分野などでも用いられてきたニューラル言語モデル(NNLM)には古くから知られる問題があり、それは現在における各種LLMでも根本解決は出来ていません。それが"Hallunication"(幻覚)現象です。分かりやすく言うなら、LLM含むNNLMが堂々と流暢に嘘っぱちをアウトプットする、という現象です。

ChatGPTを使っていると、hallucination(幻覚)と呼ばれる、まったくの架空の内容をそれらしく回答してくる現象に頻繁に遭遇する。この現象は学習データが薄い話題で起きやすいと思われる。ChatGPTの回答結果を鵜呑みにせず、使う人間が自ら裏取りをして、回答結果を吟味する姿勢で使うのが重要だ。また、ぱっと見で回答の妥当性を判断できる程度に自分が得意なジャンルで使うのが効果的だろう。つまり、GPTの学習データが豊富で、使う人間も得意なジャンルであることが、現状のChatGPTが有効に機能する条件になって来そうだけれど、これはなかなかハードルが高いと感じている。そもそもの話として、明らかに重点的に学習されているように見えるIT領域以外について、現状のChatGPTはどのジャンルが得意なのだろうか、ということも定かではないからだ。

疲れる

他であまり言われていない気がするけれど、AIアシストありで仕事をすると、同一労働時間の疲労感が高まると感じている。作業の手を止めて、ああでもない、こうでもないと、問題の解決方法を考える時間がChatGPTの回答によってカットされて、意思決定や実装などの知的負荷の高いタスクを一日中集中して取り組むような働き方になるからだ。あまりやり過ぎないようにセーブしないと、体調不良に陥る危険があると感じている。

おわりに

以上、ChatGPTの便利な使い方についてまとめてみた。従来のGoogle検索主体のソリューション探索方法と比べて、有効な解に辿り着くまでの時間が劇的に短縮されるケースが多いと感じている。

AIアシストが当たり前になる世界観について色々と感じていることがあるので、エッセイ的な記事も別に書きたいと考えている。

upsert_allメソッドを使って手軽に更新できるrails db:seedコマンドを作る

Railsで開発環境のデータを追加するrails db:seedコマンドの中身で、Rails 6で追加されたupsert_allメソッドを使うと、後から何度でも上書き更新できるコマンドにできて便利な印象があるので、実装例をサラッと書いておきたい。

seedsをCSVで用意する

データの形式は何でも良いのだけれど、RDBのレコードに対応するデータはCSV形式で書くのが直感的で扱いやすい印象があるので、今回はCSVで登録する方式とする。db/seedsディレクトリ下に、"#{テーブル名}.csv"命名ルールでCSVファイルを作成し、ヘッダーにカラム名の形式で登録する。

seeds.rbでupsert_allで更新する

CSVの中身を、upsert_allの引数に指定できるhashの配列に変換する。upsert_allではcreated_atとupdated_atも指定する必要があるので、現在時刻を入れておく。

実行

bin/rails db:seed

これで後から何度でも上書き更新できるdb:seedコマンドができた。実行時間も短く収まる処理になっていると思う。