{"id":15454262,"url":"https://github.com/dodonki1223/createlgtm","last_synced_at":"2026-04-28T11:34:15.210Z","repository":{"id":98778158,"uuid":"185379566","full_name":"dodonki1223/CreateLGTM","owner":"dodonki1223","description":"GASとブックマークレットでLGTM用の文言を自動作成する","archived":false,"fork":false,"pushed_at":"2021-10-24T07:26:26.000Z","size":10956,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-02T10:28:24.302Z","etag":null,"topics":["bookmarklet","gas","gas-lgtm","google-spreadsheet","json","lgtm"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dodonki1223.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-07T10:28:59.000Z","updated_at":"2021-10-24T07:26:29.000Z","dependencies_parsed_at":"2023-03-11T08:01:03.646Z","dependency_job_id":null,"html_url":"https://github.com/dodonki1223/CreateLGTM","commit_stats":{"total_commits":15,"total_committers":1,"mean_commits":15.0,"dds":0.0,"last_synced_commit":"d3879497c66ab7c2b9b4187c9920ac35884f944f"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dodonki1223%2FCreateLGTM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dodonki1223%2FCreateLGTM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dodonki1223%2FCreateLGTM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dodonki1223%2FCreateLGTM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dodonki1223","download_url":"https://codeload.github.com/dodonki1223/CreateLGTM/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246009029,"owners_count":20708880,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bookmarklet","gas","gas-lgtm","google-spreadsheet","json","lgtm"],"created_at":"2024-10-01T22:01:57.284Z","updated_at":"2026-04-28T11:34:10.168Z","avatar_url":"https://github.com/dodonki1223.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LGTM自動生成ツール\n\n## 概要\n\nLGTMする時、自分の好きな画像でLGTM用の文言をブックマークレットとGASを使用し自動生成してくれるツールです。   \nGoogleスプレッドシートに設定した画像からランダムでLGTM用の文言を自動生成しクリップボードにコピーします。\n実行すると右下にクリップボードにコピーされた画像を表示してくれます。  \n\n![sample_create_LGTM](/image/sample_create_LGTM.gif)\n\n実行するとクリップボードに下記のようなものがコピーされますのでそのまま貼り付けて使用します。\n\n```markdown\n# LGTM\n\n[プログラマが知るべき97のこと](https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/) - [学び続ける姿勢](https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/%E5%AD%A6%E3%81%B3%E7%B6%9A%E3%81%91%E3%82%8B%E5%A7%BF%E5%8B%A2)\n\n![盾の勇者の成り上がり（ラフタリア）](https://66.media.tumblr.com/f03d632c1f0177d666258d4bfe8f9376/tumblr_pm94ffVtZU1th206io1_640.gif)\n```\n\n## 使い方\n\n### GoogleスプレッドシートにLGTMで使用する画像の設定\n\n新規でGoogleスプレッドシートを作成します。\nシート名は`LGTM`にしてください。\nGoogleスプレッドシートにLGTMで使用したい画像のURLを設定します。\n\n![sample_spreadsheet](/image/sample_spreadsheet.png)\n\n下記のような感じでGoogleスプレッドシートを埋めます。\nimage列は別に設定しなくても良いです。必要なのはID〜description列までです。\n\n| ID  |  URL             | description       | image       |\n|:----|:----------------:|:-----------------:|:-----------:|\n| 1   |  LGTM画像１のURL |  LGTM画像１の説明 | =IMAGE(B2)  |\n| 2   |  LGTM画像２のURL |  LGTM画像２の説明 | =IMAGE(B3)  |\n| 3   |  LGTM画像３のURL |  LGTM画像３の説明 | =IMAGE(B4)  |\n| 4   |  LGTM画像４のURL |  LGTM画像４の説明 | =IMAGE(B5)  |\n\n### Googleスプレッドシートに「プログラマが知るべき９７のこと」の設定\n\n新規でシートを作成しシート名を `プログラマが知るべき97のこと` にします。  \n下記のような感じでGoogleスプレッドシートを埋めます。\n\n| ID  | TITLE                                                | URL                                                                                                                     |\n|----:|:-----------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------:|\n| 1   | 分別のある行動                                       | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B2))   |\n| 2   | 関数型プログラミングを学ぶことの重要性               | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B3))   |\n| 3   | ユーザが何をするかを観察する-あなたはユーザではない  | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B4))   |\n| 4   | コーディング規約を自動化する                         | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B5))   |\n| 5   | 美はシンプルさに宿る                                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B6))   |\n| 6   | リファクタリングの際に注意すべきこと                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B7))   |\n| 7   | 共有は慎重に                                         | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B8))   |\n| 8   | ボーイスカウト-ルール                                | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B9))   |\n| 9   | 他人よりまず自分を疑う                               | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B10))  |\n| 10  | ツールの選択は慎重に                                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B11))  |\n| 11  | ドメインの言葉を使ったコード                         | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B12))  |\n| 12  | コードは設計である                                   | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B13))  |\n| 13  | コードレイアウトの重要性                             | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B14))  |\n| 14  | コードレビュー                                       | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B15))  |\n| 15  | コードの論理的検証                                   | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B16))  |\n| 16  | コメントについてのコメント                           | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B17))  |\n| 17  | コードに書けないことのみをコメントにする             | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B18))  |\n| 18  | 学び続ける姿勢                                       | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B19))  |\n| 19  | 誰にとっての「利便性」か                             | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B20))  |\n| 20  | すばやくデプロイ-こまめにデプロイ                    | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B21))  |\n| 21  | 技術的例外とビジネス例外を明確に区別する             | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B22))  |\n| 22  | 1万時間の訓練                                        | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B23))  |\n| 23  | ドメイン特化言語                                     | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B24))  |\n| 24  | 変更を恐れない                                       | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B25))  |\n| 25  | 見られて恥ずかしいデータは使わないこと               | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B26))  |\n| 26  | 言語だけでなく文化も学ぶ                             | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B27))  |\n| 27  | 死ぬはずのプログラムを無理に生かしておいてはいけない | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B28))  |\n| 28  | 「魔法」に頼りすぎてはいけない                       | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B29))  |\n| 29  | DRY原則                                              | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B30))  |\n| 30  | そのコードに触れてはならない                         | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B31))  |\n| 31  | 状態だけでなく-ふるまい-もカプセル化する             | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B32))  |\n| 32  | 浮動小数点数は実数ではない                           | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B33))  |\n| 33  | オープンソースプロジェクトで夢を実現する             | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B34))  |\n| 34  | API設計の黄金律                                      | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B35))  |\n| 35  | 超人の神話                                           | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B36))  |\n| 36  | ハードワークは報われない                             | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B37))  |\n| 37  | バグレポートの使い方                                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B38))  |\n| 38  | 余分なコードは決して書かない                         | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B39))  |\n| 39  | 最初が肝心                                           | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B40))  |\n| 40  | プロセス間通信とアプリケーションの応答時間の関係     | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B41))  |\n| 41  | 無駄な警告を排除する                                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B42))  |\n| 42  | コマンドラインツールを使う                           | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B43))  |\n| 43  | プログラミング言語は複数習得すべき                   | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B44))  |\n| 44  | IDEを知る                                            | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B45))  |\n| 45  | 限界を知る                                           | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B46))  |\n| 46  | すべきことは常に明確に                               | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B47))  |\n| 47  | 大量のデータはデータベースで                         | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B48))  |\n| 48  | いろいろな言葉を学ぶ                                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B49))  |\n| 49  | 見積りとは何か                                       | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B50))  |\n| 50  | Hello,-Worldから始めよう                             | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B51))  |\n| 51  | プロジェクト自身にしゃべらせる                       | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B52))  |\n| 52  | その場しのぎ-が長生きしてしまう                      | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B53))  |\n| 53  | 正しい使い方を簡単に-誤った使い方を困難に            | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B54))  |\n| 54  | 見えないものを見えるように                           | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B55))  |\n| 55  | 並行処理に有効なメッセージパッシング                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B56))  |\n| 56  | 未来へのメッセージ                                   | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B57))  |\n| 57  | ポリモーフィズムの利用機会を見逃さない               | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B58))  |\n| 58  | テスト担当者はプログラマの友人                       | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B59))  |\n| 59  | バイナリは常に1つ                                    | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B60))  |\n| 60  | 真実を語るはコードのみ                               | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B61))  |\n| 61  | ビルドをおろそかにしない                             | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B62))  |\n| 62  | プリミティブ型よりドメイン固有の型を                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B63))  |\n| 63  | ユーザの操作ミスを防止する                           | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B64))  |\n| 64  | プロのプログラマとは                                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B65))  |\n| 65  | バージョン管理システムを有効に使う                   | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B66))  |\n| 66  | いったんコンピュータから離れてみる                   | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B67))  |\n| 67  | コードを読む                                         | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B68))  |\n| 68  | 人間-を知る                                          | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B69))  |\n| 69  | 車輪の再発明の効用                                   | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B70))  |\n| 70  | シングルトンパターンの誘惑に負けない                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B71))  |\n| 71  | パフォーマンスへの道は地雷コードで敷き詰められている | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B72))  |\n| 72  | シンプルさは捨てることによって得られる               | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B73))  |\n| 73  | 単一責任原則                                         | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B74))  |\n| 74  | イエス-から始める                                    | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B75))  |\n| 75  | 面倒でも自動化できることは自動化する                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B76))  |\n| 76  | コード分析ツールを利用する                           | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B77))  |\n| 77  | 偶然の仕様ではなく本物の仕様のためのテストを書く     | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B78))  |\n| 78  | テストは夜間と週末に                                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B79))  |\n| 79  | テストのないソフトウェア開発はあり得ない             | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B80))  |\n| 80  | 1人より2人                                           | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B81))  |\n| 81  | エラーがエラーを相殺してしまう                       | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B82))  |\n| 82  | 他者への思いやりを意識したコーディング               | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B83))  |\n| 83  | UNIXツールを友にする                                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B84))  |\n| 84  | 正しいアルゴリズムとデータ構造を選ぶ                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B85))  |\n| 85  | 冗長なログは眠りを妨げる                             | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B86))  |\n| 86  | WETなシステムはボトルネックが見つかりにくい          | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B87))  |\n| 87  | プログラマとテスターが協力してできること             | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B88))  |\n| 88  | コードは生涯サポートするつもりで書く                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B89))  |\n| 89  | 関数の-サイズ-を小さくする                           | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B90))  |\n| 90  | コードを見る人のためにテストを書く                   | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B91))  |\n| 91  | 良いプログラマになるには                             | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B92))  |\n| 92  | 顧客の言葉はそのまま受け取らない                     | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B93))  |\n| 93  | エラーを無視するな                                   | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B94))  |\n| 94  | リンカは魔法のプログラムではない                     | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B95))  |\n| 95  | ペアプログラミングと-フロー                          | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B96))  |\n| 96  | テストは正確に-具体的に                              | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B97))  |\n| 97  | ステートに注目する                                   | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B98))  |\n| 98  | 命を吹き込む魔法                                     | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B99))  |\n| 99  | ロールプレイングゲーム                               | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B100)) |\n| 100 | ルーチンワークをフローのきっかけに                   | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B101)) |\n| 101 | プログラマが持つべき3つのスキル                      | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B102)) |\n| 102 | 快適な環境を追求する                                 | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B103)) |\n| 103 | 見知らぬ人ともうまくやるには                         | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B104)) |\n| 104 | 不具合にテストを書いて立ち向かう                     | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B105)) |\n| 105 | 育ちのよいコード                                     | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B106)) |\n| 106 | Noといえることの大事さ                               | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B107)) |\n| 107 | 名前重要                                             | =CONCATENATE(\"https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/\",ENCODEURL(B108)) |\n\n### Googleスプレッドシートの内容をJSONで取得できるようにする\n\nGoogleスプレッドシートからスクリプトエディタを開きます。\n\n![sample_spreadsheet](/image/sample_script_editor.png)\n\nスクリプトエディタに下記のソースをコピーし貼り付け保存します。\n[https://github.com/dodonki1223/CreateLGTM/blob/master/LGTM.gs](https://github.com/dodonki1223/CreateLGTM/blob/master/LGTM.gs)\n\n![sample_paste_source](/image/sample_paste_source.png)\n\nWebアプリケーションとして公開する\n\n![sample_release](/image/sample_release.png)\n\n![sample_release_setting](/image/sample_release_setting.png)\n\n`現在のウェブアプリケーションのURL`に表示されているURLをコピーしてブラウザで叩くと下記のようにJSONを取得できていれば大丈夫です。\n\n![sample_get_json](/image/sample_get_json.png)\n\n### 自動生成用のブックマークレットを作成する\n\n[https://github.com/dodonki1223/CreateLGTM/blob/master/bookmarklet.js](https://github.com/dodonki1223/CreateLGTM/blob/master/bookmarklet.js)のソースをコピーし[２行目](https://github.com/dodonki1223/CreateLGTM/blob/2a6c9c8718ab620ac78bc34884947dbe92b7bf62/bookmarklet.js#L2)のURLの部分を先程コピーした`現在のウェブアプリケーションのURL`に書き換えたのちブックマークレットとして保存すれば設定完了です。\n\n```JavaScript\njavascript:(function(){\n  const GAS_API_URL = 'https://script.google.com/macros/s/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/exec';\n\n  let script = document.createElement('script');\n  script.src = GAS_API_URL + '?callback=copyLgtm';\n  document.body.appendChild(script);\n  document.body.removeChild(script);\n\n  window.copyLgtm = function(data) {\n    let json = JSON.stringify(data);\n    let jsonParse = JSON.parse(json);\n\n    execCopy(jsonParse.data.lgtm);\n    displayCopyImg(jsonParse.data.lgtm_url, jsonParse.data.description);\n  };\n\n  window.execCopy = string =\u003e {\n    let copyElement = document.createElement('div');\n    copyElement.style.cssText = 'position: fixed; right: 200%;';\n\n    let pre = document.createElement('pre');\n    pre.style.cssText = '-webkit-user-select: auto; user-select: auto;';\n\n    copyElement.appendChild(pre).textContent = string;\n\n    document.body.appendChild(copyElement);\n    document.getSelection().selectAllChildren(copyElement);\n    document.execCommand('copy');\n\n    document.body.removeChild(copyElement);\n  };\n\n  window.displayCopyImg = (lgtmImgUrl, description) =\u003e {\n    let displayElement = document.createElement('div');\n    displayElement.style.cssText = 'position: fixed; bottom: 1%; right: 1%; z-index: 9999;';\n\n    let p = document.createElement('p');\n    p.textContent = description;\n    p.style.cssText = 'position: absolute; top: 0; left: 0.5em; margin: 0; color :white; font-weight: bold;';\n    displayElement.appendChild(p);\n\n    let img = document.createElement('img');\n    img.src = lgtmImgUrl;\n    img.style.width = (window.parent.screen.width * 0.2) + 'px';\n    displayElement.appendChild(img);\n\n    document.body.appendChild(displayElement);\n    setTimeout(() =\u003e document.body.removeChild(displayElement), 3000);\n  };\n})();\n```\n\n### 特定の画像を指定する\n\nURLパラメータにシート名やIDを指定することで特定の画像を指定してLGTMの文言を作成することができます。  \n\n[https://github.com/dodonki1223/CreateLGTM/blob/bc64d09d7997d17117878362dfea4409336432d8/bookmarklet.js#L5](https://github.com/dodonki1223/CreateLGTM/blob/bc64d09d7997d17117878362dfea4409336432d8/bookmarklet.js#L5)の箇所にURLパラメータを追加することで特定の画像を指定することができます。\n\n修正前\n\n```JavaScript\n  script.src = GAS_API_URL + '?callback=copyLgtm';\n```\n\n修正後\n\n```JavaScript\n  script.src = GAS_API_URL + '?callback=copyLgtm\u0026sheet=interesting\u0026id=2';\n```\n\nこの場合ですと、`interesting`シートの`id`が２の画像でLGTMの文言を作成してくれます。\nsheetの指定が無いと`LGTM`のシートが選択されます。また`id`の指定が無いとランダムに選択される仕様になっています。\n\n## その他\n\ngithubだと下記のようなエラーが出て使用できません。\ngithub以外でブックマークレットを使用して下さい。\n\n```\nVM154:1 Refused to load the script 'https://script.google.com/macros/s/xxxxxxxxxxxxxxxxxx/exec?callback=copyLgtm' because it violates the following Content Security Policy directive: \"script-src github.githubassets.com\". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.\n```\n\nこれはどうしたら良いのだろうか……🤔  \ngithubはブックマークレットを実行できないようだ\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdodonki1223%2Fcreatelgtm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdodonki1223%2Fcreatelgtm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdodonki1223%2Fcreatelgtm/lists"}