「Pythonクイズの原稿執筆とChatGPT」と「ChatGPT×Obsidianでつくる“最強の自習フロー”」:Deep Insider's Eye 一色&かわさきの編集後記
かわさきからは「Pythonクイズの原稿執筆とChatGPT」というタイトルで日々の原稿執筆で「どのようにChatGPTを“相棒”として活用しているか」について、一色からは「ChatGPT×Obsidianでつくる“最強の自習フロー”」というタイトルで数学のつまずきから始まった最新AI技術を活用した“ぼくのかんがえたさいきょうの自習スタイル”について書きました。
@ITのDeep Insiderフォーラム【AI・データサイエンスの学びをここから】を担当しているDeep Insider編集部の一色とかわさきです。1月末に公開した編集後記から約3カ月ぶりですね。
編集者が記す「あとがき」である、この編集後記では、執筆/編集時には書けなかった小話や裏話、感想、ぜひ読者にも知ってほしいという話などを書いています。
Pythonクイズの原稿執筆とChatGPT(かわさき)
かわさきしんじ
大学生時代にIT系出版社でアルバイトを始めて、そのまま就職という典型的なコースをたどったダメ人間。退職しても何か他のことをできるでもなくそのままフリーランスの編集者にジョブチェンジ。そしてDeep Insider編集部に拾ってもらう。お酒とおつまみが大好き。通称「食ってみおじさん」。最近はすっかり「ダイエットおじさん」に変貌したのでした。現在は体重63kg程度で安定。ウォーキングと筋トレ、カロリー管理は継続しています。それでも好きなものを食べて、好きなお酒を飲んでも、それほど体重に変化がないような生活が身に付いてきたので、それなりに楽しい日々を過ごしています。
この後に出てくる一色さんの自習ワークフローと比べると非常にアナログなのですが、今回はかわさきが主に『Pythonステップアップクイズ』の原稿を執筆する際にどんな感じに生成AI(ChatGPT)を使っているのかを紹介してみましょう。多分、皆さんの参考にはならないと思いますよ(笑)。
なお、クイズの問題や正解例などのコードは基本的にVisual Studio Codeで記述し、その中でコードの実行確認まで行っています。このときにはGitHub Copilotを使っていますが、まあ短いコードで手書きなので、生成AIの恩恵はあまり受けていません。また、原稿執筆にはVimを使っています。VimにもChatGPTを使うためのプラグインがあるようですが、これも使っていません。
Cursorもインストールはしたんですが、結局、コードの記述には未だにVisual Studio Codeを使ってしまっています。もっとちゃんとCursorを使い込んでみないといけませんねぇ(かわさき)。
私もCursorはたまに起動するんですが、ほんの少し触っただけです。新規開発では使えそうでも、既存コードを勝手に改変されるのがちょっと嫌で、結局、敬遠しちゃうんですよね。Windsurf Editorは、まだインストールすらしておらず……。AIコーディングかいわい、GitHub Copilotエージェントも含めて新機能が次々出てくるので、最新情報にまでキャッチアップするのが本当に大変ですよね……(一色)。
ChatGPTと対話しているときには、これらのエディタとの間でコピー&ペーストが発生することもあります。なんつーか、我ながら古くさいですね。そろそろ何か考えた方がよいかもしれません。
で、どんなところでChatGPTを使っているかをまとめると次のようなところになります。
- 問題のネタ探し
- 問題のコードと正解例のコードの検討
- 原稿全体のチェック
- 記事タイトルの検討
問題のネタ探しには、WebからPythonのアンチパターンを探したり、Python関連の書籍を参考にしたりもします。そうした手段の一つとしてChatGPTも使うということですね。でもプロンプトを工夫しないせいか、ありがちなヤツしか出てこないので、実際にはChatGPTでネタが見つかったことはなかったような気がします。
Webや参考書などからネタを見つけたら、そこから問題となるコードとその答えとなるコードを考えます。このときには、自分が考えた答えが妥当なものかどうか、他にもっとよいやり方がないかどうかなどを検討する必要がありますよね。そういうところではChatGPTは役に立ってくれています。例えば、以下はPythonクイズの「たくさんの文字列を+=演算子で結合するつもりなの? もっと良い方法ってありますよね!」の原稿を執筆したときのChatGPTとの対話です。筆者の側ではjoinメソッドを使う方法が答えだと想定した上で、ChatGPTに質問しています。そして、ChatGPTからもそうした回答が得られたところです。
「一般にはコレでしょ?」というところを筆者とChatGPTで合意したわけですが、「いや、そうじゃない。こっちだろ!」と考える方もいるかもしれません。そこで、他の可能性を考えるために、上の画像では「他にも方法はありますか?」と問うています。
分かります! 私も「他の可能性はないか」「見落としていないか」「自分が勘違いしていないか」などを確かめたくて、よくチャットAI(ChatGPT、Gemini、Claude、Perplexity、特定の文書がある場合はNotebookLM)に同じ質問を投げています。すると、「この表現だと誤解されるかも」などと気付けることもあるんですよね。
多くの場合、事前に考えた問題と答えのコードを念頭に「こういうコードになることを考えると、こんな話題を入れて、こんな感じの構成になるな」というのが頭の中にはぼんやりとできています。その後、いざ執筆という時点でChatGPTと上のように対話しながら「このネタも追加しようか?」となることもあります。そういう意味ではChatGPTはよきパートナーになってくれているといえるでしょう。
原稿を書き終えると、全体をChatGPTに流して、その構成やコードに間違いがないことのチェックなどをしてもらうこともあります。もちろん、その前にVisual Studio Code内でコードが動いて、こちらの意図した通りになっていることは確認しているので、コードのチェックについては不要かもしれません。が、それほど時間がかかるわけでもないので、やってもらうのがよいでしょう。
上の画像では記事タイトルが「たくさんの文字列を結合するにはよい方法って何ですか?」になっている点に注意してください。面白みも何もない、普通のタイトルのような気がしませんか?(執筆時点では十分なタイトルだと思っていたんでしょうねぇ……)。そこで、タイトルについて聞いているのが次の画面です。
ChatGPTがまずいのは、Pythonクイズが「クイズ」であると分かってくれていないところです。記事タイトルに正解を入れたらダメでしょ? と思うのですが、毎回毎回、ヤツは記事タイトルの中に答えとなるコードのポイントを入れてくるんですよね。なので、提案されたものをそのまま採用することはまずありません。クイズなので、「この答えは何だろう?」と読者の興味をそそるようなタイトルを幾つかの候補から選び、アレンジして正式タイトルとして採用しています。
そうして考えたタイトルであっても、一色さんからもっと良いタイトルが提案されてしまうという悲しいこともよくあります(笑)。
タイトルだけで読者の反応が大きく変わるので、本当に難しいですよね。でも、無理に「あおる」のではなく、「読者の関心や気持ちに寄り添った表現にする」ことで、「これ知らない!」「もしかして自分のコードも……?」と自然に引き込まれるような、キャッチーかつ意味のあるタイトルになるんじゃないかなと思います。
とまあ、アナログなやり方ではありますが、Pythonクイズの問題と答え、解説はこんな感じで練られているんですよ、というお話でした。原稿執筆をChatGPTと二人でやっているような感じです(ペアプログラミングならぬペアライティングとでもいうんでしょうか)。では、もっとちゃんとした生成AIの活用はこの後の一色さんの話を参考にしてくださいね!
ハードルあげておきましたよ!
ハードルを上げてきましたね(苦笑)。ならば、“ぼくのかんがえたさいきょうの自習スタイル”で跳び越えてみせますよ!……とか言ってみました(笑)。
ChatGPT×Obsidianでつくる“最強の自習フロー”(一色)
一色政彦(いっしきまさひこ)
@ITのDeep Insider編集部の編集長。ChatGPTのメモリ機能(対話履歴)で自己分析したところ、「“根拠となる裏取り”は必須で、リスクにも過敏な完璧主義者」と診断されました(面倒くさそうなヤツです、苦笑)。それに対する処方箋は「致命的ミスだけ100%つぶしたら“Good-Enough”でまず形にし、あとから磨け」とのこと。このアドバイスを『ネタ帳』連載で試してみるつもりですが、数式が絡む“学び”記事はやっぱり裏取りしたいですね……。そんなわけでカフェインを取りながら今夜も頑張ります。ちなみに、「誰もが“MCP”に注目すべき」と書いた『ネタ帳』記事は読んでいただけましたか? 共感してくださった皆さん、一緒に新AIエージェント時代を楽しみながら乗り越えていきましょう!
最近、『線形代数の半歩先 データサイエンス・機械学習に挑む前の30話』(大久保潤 著、講談社サイエンティフィク)という書籍を読み始めました。この本の特徴は、「なぜこういう計算ができるのか」という背景に加えて、「それをどう見るか」「どんな視点で捉えるか」といった“見方”まで丁寧に示してくれることです。線形代数の基礎的な計算方法はある程度知っているのですが、「AIや機械学習、データ分析のために、こういう知識ってやっぱり必要だよな」と思ったのと、2025年3月11日に出たばかりの新刊を“積ん読”にする前に読んでしまおうと思ったことも、読み始めるきっかけになりました。
内容は30話に小分けされていて、1日1話なら1カ月で無理なく読める構成です。私は平日の夕食後にカフェに寄って、ラテを飲みながら30分ほどかけて1話ずつ読んでいます。この記事を書いている4月21日時点で21話まで読み終えていて、恐らく5月には読破できている……はずです。
とはいえ、私は現役の大学生でもなく、日常的に線形代数を扱う機会があるわけでもありません。そもそも大学では線形代数を学んでいないので、ほぼ独学です。読み進める中で、やはり次々とつまずく場面が出てきてしまいます。
そこでChatGPTに質問してみたのですが、それがきっかけで「今の時代は、数学の独学が本当にしやすい!」と感動しました。さらに、いろいろなツールを組み合わせて自習方法を強化していく中で、自分なりの“最強の自習フロー”のようなものも見えてきました。具体的には以下のようなフロー(流れ)です(※知らない単語があってもスルーでOKです!)。
新AIエージェント時代における“最強の自習フロー”:
(1)疑問を写真でChatGPTに質問
(2)回答情報をObsidianにストック
(3)“MCP”+Claude Desktopでテスト作成 【※将来的な実現目標です】
今回の編集後記では、上記の手順を1つずつ紹介しようと思います。できるだけ簡単にまねできるよう、丁寧に書いたため少し長くなっていますが、どうかご了承ください。
Obsidianや“MCP”に既になじみのある方なら「確かに便利だよね!」となるかもしれませんが、そうでない方にとっては、「なんだか別世界の話をされてるな……」と感じるかもしれませんね。最近は、話題のツールやAI関連の新概念を巡って、「情報格差が急速に広がっているのではないか」と感じています。例えば「MCP」という単語を出しただけで、「あ、自分とは関係なさそうだからスルーしとこう……」みたいな、微妙な距離を感じることもあります。
でも実は、どれもそんなに難しいものではありません。ITが専門ではない社会人や学生でも、ちょっと触ってみれば十分に使いこなせるレベルのものばかりです。なので、あまり構えず、肩の力を抜いて気軽に読んでもらえたらうれしいです。
「MCP」でネット検索しようと思うと、Microsoftの「MCP」(Microsoft Certification Program)と被っちゃうんじゃないかと心配になりますよね。ならない? そうですか(笑)。
あー、それありましたね……。今は「Microsoft Certified(マイクロソフト認定資格)」って表記が主流みたいで、「MCP」ってあまり見かけなくなった気がします。
(1)疑問を写真でChatGPTに質問
私の場合、この本を読み進めていると、何話か前に出た数式や用語などで「これ何だっけ?」と思い出せなかったり、単純に知らなくて簡単には理解できなかったりすることがよくあります。そんなときには次の図のように、ChatGPTのスマートフォン(iOS/Android)アプリで、数式などを含む該当箇所の写真を撮って(数式を含まない場合はテキストを入力して)質問します。
ChatGPTアプリが良いのは、図の中央のように指による線描画で質問したい箇所を明示できる点です。この機能が便利なので、ChatGPTを使うようにしています。私が試した範囲では、2025年4月21日現在、Geminiアプリはアップロード箇所を四角で領域指定でき、Claudeアプリは領域指定も線描画もできませんでした。
特に数学は、誰かに教わる方が圧倒的に効率が良くて、自習はなかなか大変ですよね。分からない箇所が出てくると、それを解消するために基礎までさかのぼって大回りする……みたいなこともよくありました。
でも今は、ChatGPTなどチャットAIが先生や家庭教師みたいに疑問に答えてくれるおかげで、分からないところをその場で直接的に調べられるようになって、本当に自習しやすくなったなと実感しています。今の時代に数学を学べる人が、うらやましいくらいです。
このやり方は便利ですね。ぼくもやってみようと思いました。
(2)回答情報をObsidianにストック
こうやって質問した内容は、自分の理解があいまいな部分だと思います。だからこそ、ノートとして残しておきたいですよね。そのために使えるのがObsidian(オブシディアン)です。
Obsidianは、分かりやすく言うと、ノートをMarkdown(マークダウン、文書を記述するための書式の一つ)形式で書きためて整理できるエディタです(※Markdownを知らない方は、こちらの記事を参考にしてみてください)。NotionやMicrosoft OneNoteなど、ノート用のサービス/アプリを使ったことがある方なら、それの“Markdownファイル版”だと思ってもらえるとイメージしやすいかと思います。
Obsidianは、iOS/Android向けのスマートフォンアプリから、Windows/macOS/Linux向けのデスクトップアプリまで提供されており、私は主にWindows用デスクトップアプリを使っています。操作は基本的に直感的で、ほぼ習わずに使えると思いますが、唯一「vault(ボールト)」と呼ばれる“保管庫”のような概念が特徴的です。vaultには、ローカル上の任意のフォルダを指定できるので、MarkdownファイルはWindowsエクスプローラなどからも簡単に操作できます。
このObsidianに、ChatGPTでの質問と回答をノートとして記録しておきたいので、Markdown形式でエクスポートする必要があります。ChatGPTには会話全体を直接エクスポートする機能がまだないため、私はChrome拡張の「ChatGPTエクスポーター」を利用しています。ちなみに、「Claudeエクスポーター」もありますが、同じもののGemini版はなぜかないようです。
この拡張機能をインストールすれば、次の図のような手順で、簡単にMarkdownファイルをダウンロードできます。無料でも使えるので、私も無料版を使っていますが、特に困ることはありません。無料版では、エクスポートのたびに「Export Success!」というダイアログが表示されますが、有料のサブスクリプションを契約すれば、そのダイアログは出なくなります。
ダウンロードしたMarkdownファイルは、ドラッグ&ドロップでObsidianに簡単に取り込めます。次の図では、Obsidianの左側のファイル一覧(=ファイルエクスプローラ)内のフォルダに、Markdownファイルをドラッグ&ドロップしています。なお、Obsidianを使わずに、Windowsエクスプローラでそのフォルダを開き、直接ファイルを追加することも可能です。
ChatGPTのスマートフォンアプリで撮影した画像は、ObsidianにインポートしたMarkdownファイル内でも、基本的には次の図のようにそのまま表示されます。
しかし、Markdownファイル内で表示される画像は、ChatGPT上の一時的なリンクで読み込まれているため、時間が経つと表示されなくなります。そのため、ローカルPCに画像をダウンロードし、リンク先をそちらに差し替えておくことをお勧めします。この作業自体は簡単です。ただし、画像が不要であれば、以下の置き換え作業は省略しても問題ありません。
その作業を始める前に、まずはMarkdownファイル内の画像ファイルがサブフォルダ「attachments」に保存されるように設定しておきましょう。この設定は最初に1回だけ行えばOKです。具体的には、Obsidianアプリの左下にある[設定](歯車アイコン)をクリックし、表示された設定ダイアログの左側で[ファイルとリンク]タブを選択します。右側にある[新規添付ファイルの作成場所]の項目で、「現在のフォルダのサブフォルダ」を選んでください。これで設定は完了です。
事前準備が済んだら、いよいよChatGPT上の画像をローカルに保存し、Markdownファイル内のリンクを自動で置き換えます。この作業は、次の図のような手順で行います。左端の一番下にある[コマンドパレット](>_アイコン)をクリックし、表示されたパレットに「Download attachments for current file」というコマンドを入力してください(または下に表示される候補から選んでもOK)。その後、[Enter]キーを押せば実行されます。
これにより、Markdownファイルが存在する現在のフォルダ内に「attachments」というサブフォルダが作成されます。その中に画像がダウンロードされ、Markdownファイル内の画像リンクもローカル画像に差し替えられます。たった1つのコマンドで、ここまでの作業が全自動で行われるのは本当に便利ですね。これで作業は完了です。
せっかく質問して得られた回答を、そのまま埋もれさせてしまうのはもったいないですよね。今回は「数学の自習」がテーマですが、ストックしておくとよさそうな情報は、Obsidianにまとめて残しておくのも有益だと思います。
例えば最近、オンライン会議ツールのGoogle Meetに、Gemini(GoogleのAI)が自動的に会話を要約してくれる「メモ機能」が搭載されました。私の所属会社でもこの機能を活用して、議事録を取るようになっています。出力されたメモは「マークダウン(.md)」ファイルとしてもダウンロードできるので、今回紹介している方法と同じようにObsidianにストックすることが可能です。
こうしてObsidianに蓄積しておけば、次に紹介する(3)の手順が実現できた際には、チャットAIを使って過去の会議内容について質問したり、調査したりできるようになるはずです。実現すれば、かなり便利そうなので楽しみです。
『解決!Python』の原稿をまとめておくと、自分だけの解決!Pythonチャットボットの可能性が!
じゃあ、『AI自動化による“解決!Python”の無限生成クイズ』でサービス化しちゃいますか?(……もちろん冗談です)
(3)“MCP”+Claude Desktopでテスト作成 【※将来的な実現目標です】
最後に、ストックしておいた「数学」ノートを活用して、自分の弱点を克服するためのテストを作ってみたいと考えています。この目的で使用するのが、チャットAIのClaudeのデスクトップアプリ「Claude Desktop」です。また、Claude DesktopからObsidianにアクセスするには、“MCP”を使って接続します。
“MCP”とは、AIがObsidianのような外部サービスにアクセス(接続)し、その内容を活用するための“橋渡し役”となる仕組みです。詳しく知りたい方は、自己紹介にも記載した“MCP”について書いた『ネタ帳』記事をご一読ください。
現在は、MCP(Model Context Protocol)公式のサンプル実装に含まれる「Obsidian Markdown Notes」を試しています。これは、Obsidianに接続して、保管庫にあるMarkdownノートを読み込んだり、検索したりできる機能を備えたMCPサーバです。
……という形で、このMCPサーバをインストールし、実際に「Obsidianの情報でテストを作成して」とClaude Desktopに指示してみたのですが、実行途中でアプリがハングアップしてしまい、今回の編集後記の執筆時点では目標を達成できていません。また、vault(保管庫)として指定したフォルダ名に日本語を使っている場合、不具合が起きやすい可能性があります。Claude DesktopのMCP関連は、まだ「完成度が高い」とは言いづらいと感じました。
ということで、(3)は私自身まだ試行錯誤中なので、詳細な紹介は今回は割愛します。ここでは「Obsidian Markdown Notes」MCPサーバを使いましたが、別の「MarkusPfundstein/mcp-obsidian: ローカルREST APIコミュニティプラグインを経由してObsidianと対話するためのMCPサーバ」に変更して試そうと考えています。ただ、本稿の執筆までに間に合わなかったため、やむなくここまで。うまくいったら、また別の編集後記でご紹介しますね!
Copyright© Digital Advantage Corp. All Rights Reserved.