GoogleDocsの箇条書きをSlackにきれいにコピペするツールを生成AIと作った話

(本ブログはGO Inc. Advent Calendar 2025の一部です)

はじめに

GO株式会社でエンジニアマネージャをしている渡部です。

このブログを執筆しているのは2025年12月なのですが、いつからかGoogle Docsの箇条書きをSlackにコピペしようとすると、 箇条書きのインデントレベルが保持できなくなっており、非常に困っていました。

例えば、このようなGoogle Docsの箇条書き

good_slack

これをSlackにコピーすると

bad_slack

とフラットな箇条書きでコピーされてしまいます。

これでは業務上困りますので、生成AIを使ってサクッとツールを作りました。会社ではVS Code + Github Copilotが使え、最近のGemini 3 Proのモデルも使えるので、それを使って作ってみました。

作ったもの

pythonで作ったツールはこちら Google Docsの箇条書きをSlackにコピーするツール(python版)

このツールを使うと、Google Docsの箇条書きをコピーして、クリップボードGoogle Docsの箇条書きがある状態で以下のコマンドを実行すると

python main.py

Slackに貼り付け可能なデータがクリップボードに書き込まれ、これをSlackにコピペすると以下のようにきれいにはれます

good_slack

ついでに、-t オプションでmarkdown形式のテキストとしてペーストすることもできるようにしました

python main.py -t

以下のようなテキストがクリップボードに保存されます

- インデントレベル1
    - インデントレベル2のA
    - インデントレベル2のB
    - インデントレベル2のC

なぜ単純なコピペではSlackにきれいに貼り付けられないのか

そもそも、なぜ単純なコピペではSlackに箇条書きをきれいに貼り付けられないのかですが、 Slackに対するペーストの仕様は何処にも記載されていないため、あくまで私が調査した範囲になりますが、 Slackに貼り付ける形式は以下の状態でなければいけないことがわかりました

  • MacOSクリップボードには、 org.chromium.web-custom-data のタイプで書き込まなければいけない
  • org.chromium.web-custom-data このデータタイプは、ChromiumのPickle形式(またはそれに似た独自形式)で、複数のMIMEタイプとデータのペアを格納している必要がある。具体的には、public.utf8-plain-textUTF-16 LEでエンコードされたプレーンテキストと、slack/textyのSlack独自の内部フォーマットのJSON形式のペアが格納してある必要がある。

他にもあり、詳細は実装を見ていただければと思いますが、単純なコピペでできない理由はこういった物がありました。

苦労した点。生成AI単独では開発できなかった

今回のツールはシンプルなので、生成AIに全部任せられるかなと思ったけど、そんな事はありませんでした。 特にSlack側のペーストの仕様が難解であり、生成AI単体ではその仕様を見つけることが出来ませんでした。 30回ほどいろんなフォーマットを試行錯誤しましたが、生成AIだけで作りきることが出来ませんでした。

そこで、私から生成AIに対して「まずはSlackの仕様を調べるところに注力しよう」「私がSlackの箇条書きをクリップボードにコピーするので、あなたはそのデータをダンプして調べて」と提案したところ、生成AIは「なんてクレバーな解決策でしょうか!」と感動していました。そして、生成AIは私のクリップボードの中身をバイナリレベルで調査して、仕様を解明できました。

また、全部を一度に開発しようとするとテストが複雑になってしまう問題もありました。 そこで私から生成AIに対して「まずはHTMLをSlackにペーストできる機能を作ろう。そして、その単体テストを作ろう。その後、Google Docsの箇条書きをHTMLに変換する機能を作り、結合しよう」と提案しました。生成AIに対して適切な機能分割方法を教えることで、テストが複雑になること無く、開発を完了できました。

もっと便利にするために

一旦ツールは出来たのですが、このツールはpythonの実行環境を必要としており、社内で他に困っている人に配布するにはやや不便です。

そこで、これをGo言語で書き直して、何もインストールせずに使える単一バイナリとして配布しようと考えました。

また、実はこれまでもSlackをDocsにコピペする際に便利なGo言語のツールslack_to_gdocsを作ったことがあり、この2つを生成AIに食わせてGo言語のツールを生成してもらおうと試みました。

具体的には、以下のプロンプトだけで作業をしてもらいました。

# 開発方針

../gdocs_to_slack/ にpythonで書かれたツールがあるので、それをGo言語で実装し、単一バイナリで機能を配布できるようにして


ソースコードのディレクトリ構造や、ビルドの仕方、ビルドしたアーカイブの配信方法などは ../slack_to_gdocs/ を参考にして

これに従って開発してもらったところ5分程度で動くコードがでてきました!

できたツールがこちら Google Docsの箇条書きをSlackにコピーするツール

このツールはバイナリをダウンロードして実行するだけでいいので、環境構築の必要がありません。

まとめ

2025年12月時点だと、Google Docsの箇条書きをSlackにコピペしようとすると、インデントレベルが保存されない問題があり困っていました。 そこで生成AIと一緒にpythonでそれを解決するツールを作り、さらに環境構築不要なGo言語バージョンも作りました。

この困った仕様はいつか解決されそうですが、それまではこのツールが役に立ちそうです。お困りの方はぜひ使ってみて下さい