魔法を作る仕事をしています。今回、Googleドキュメントの文書をスクリプトから編集する処理を書いていて、ハマったポイントがあるので共有します。水平線(hの扱い今回やろうとしたのは、文書を水平線(hr)で区切る構成です。水平線以降に出力結果が表示されるという構成で、水平線以前/以降を判定する処理が必要でした。BodyオブジェクトのfindObjectメソッドで行います。body.findElement(searchTypeHR);こんな感じです。これで取得できるのはRangeElementオブジェクトなので、さらにgetElement()メソッドで、中身のHorizontalRuleオブジェクトを取り出してあげます。firstHr.getElement();これを基準に、段落(Paragraphオブジェクト)の位置を判定すれば、水平線以前と以降がわかるはずです。水平線の前後要素が取れないしかし、ここがハマりポイントとなりました。HorizontalRuleオブジェクトの、文書内の位置が取れません。ここで読むべきものはドキュメントです。https://developers.google.com/apps-script/guides/docs#structure_of_a_documentこれによると、『水平線は、ListItemやParagraphの配下である』と書いてあります。文書構造としては、このようになっているわけです。.解決法HorizontalRuleオブジェクトはParagraphオブジェクトの子なので、文書内の位置を知るには、親要素となるParagraphオブジェクトを取得する必要がありました。いうわけで、以下のようにすると、文書内の位置が取れたのでした。theHr.getParent())めでたし。Scriptで、ドキュメントの差し込みを行うサンプルを作りました。完成品は別途シェアするとして、内容とハマったポイントを記録しておきます。Docsでやりたかったです。具体的には、こういう感じです。Documentの文書(テンプレート文書と呼びます)に本文と置換用のプレースホルダを書いておきます。別のスプレッドシート(実行シートと呼びます)に、差込用の言葉(相手の名前など)を書いておきます。スプレッドシートでスクリプトを実行します。プレースホルダが差込用の単語に置き換わって、テンプレート文書の後半に、新しい本文が生成されます。(テンプレートを置き換えてしまうと何度も使えないので)たくさん作れないと意味がないので、スプレッドシート上にたくさんの文書のURLと、それぞれの差し込み内容を書いておくと、一括で生成します。Drive上にドキュメント文書を作り、テンプレート文書とします。テンプレート文書には、本文とプレースホルダを記述します。テンプレート文書のドキュメントIDをコピーしておきます。Drive上にスプレッドシートを作り、実行シートとします。スクリプトファイル実行シートから作ります。テンプレートから本文を生成する部分です。今回は、テンプレート文書の中に、テンプレート部分と出力結果を生成するスタイルにします。テンプレート文書はひとつで、出力結果を分けたい場合は、別途スクリプトを調整してください。文書の中では、テンプレート部分と出力結果を水平線で区切ります。最初の水平線以前がテンプレート部分、それ以降が出力結果となります。テンプレート部分に、本文とプレースホルダを記述します。今回のサンプルでは、{最初の差し込み内容}{ふたつ目の差し込み内容}という文字列を使っています。この波カッコ内がプレースホルダとなり、出力結果では差込文字列と置き換わります。Drive内にスプレッドシートを作り、実行シートとします。シートの内容は、以下のようにします。最初の行をタイトル行とし、以下の項目を定義します。ドキュメントID差込用文字列2行目以下はデータ行です。ドキュメントIDに、テンプレート文書のドキュメントIDを指定します。差込用文字列に、プレースホルダと置き換える文字列を指定します。スクリプトエディタ...』を選択し、スクリプトエディタを起動します。スクリプトエディタのファイルを、任意の名前に変更します。指揮者のTEDトーク最近動画で見た、ある指揮者のプレンテーションがたいへん面白かったのでシェアします。TEDという、アメリカの山の中で色んなプレゼンをする大会で話しているところです。https://www.ted.com/talks/benjamin_zander_on_music_and_passion?language=ja#t-1227291このトークが素晴らしいのは1.誰でも音楽を楽しめる能力がある事を、会場の参加者に体験させる事。『自分にはできる』という体験を強烈に印象付けるのは、とても貴重な事です。2.ショパンの曲を通して、音楽の成り立ちをわかりやすく解説している事。3.自分が取り組んでいる分野に、『誰も分かってくれない』と諦めてはいけないと教えてくれる事。決意を新たにしました。今年は動画をたくさん配信するのが目標のひとつです。Googleのサーバー上に、小さなプログラムを乗せる事ができるのです。これは地味にすごいことです。Herokuを始め、プログラムを乗せる場所を使わせてくれるサービスは、他にもあります。Webアプリに拡張する事もできる事です。自動実行で定期的な処理をさせる用途にも使えます。太陽の光は、毎日定期的に降り注いで、植物を育てたり、熱を与えてくれたりします。常に吹いている風のようなものです。その一部分を、自分がうまく行くように仕掛けをしてあげることで、得をすることができます。プログラミングは、まず自分が得をしないといけません。AIBOがニュースになってますAIBOのニュースAIBOのニュースが放送されています。『可愛い、可愛い』と母は絶賛でした。一度見てしまうと、愛着がわくのもまた人間です。うちにはルンバが一台いますが、非常に可愛いものです。人間は、機械にすら愛着を見出す生き物なんだな、ということが、自分自身の感覚でよく分かります。不気味の壁って知ってますか?ロボット工学をやる人の難関です。微妙に似ていないロボットを、非常に気持ち悪く感じる』という修正があるのです。『不気味の壁』で検索すると、気持ち悪い写真が出てきます。これらは、ロボットデザイナーが壁を超えられなかった、失敗の系譜です。デザイナーは、完璧なデザインで人を魅了しないといけないのです。中途半端は、逆効果なのです。僕達も、どうせ作るなら、愛される未来を作りたいものですね。プログラムを学ぶ=プログラマー?Quoraの質問より。現在、プログラミングを勉強しています。プログラマーになりたいとは思っていません。プログラミングの知識があるからプログラマーの選択しかないのでしょうか?これについて、僕はこう答えました。全業種でプログラムが必要プログラミングできる人は、全業種で大切です。日本は少子化で、労働人口が減ってゆくので、至る所でプログラミングをして効率化しないと、国力が衰退する一方です。20年後には日本は隣国の一部になりかねません。プログラムは、必ず実世界とセットまた、プログラムは、単体では存在し得ません。レジを打つためのプログラム、在庫を管理するためのプログラム、文書を保管するためのプログラム。プログラムは、全て『別の何かを実現するために』作られます。『プログラムの分かる〇〇業界人』というのは、非常に価値が高いのです。異業種にこそプログラマーを!それだけではありません。同じレベルのスキルでも、IT業界とそれ以外では、価値が異なります。JavaScriptとSQLのスキルが少しある人がいるとします。彼は、ソフトウェア会社のプログラマーなら見習いですが、例えば建設業界にいれば、魔法使いのように扱われるかも知れません。ソフトウェア導入や開発を外注する時など、建設会社にシステムに詳しい人がいれば、業務ルールや業界慣習などについて、仕様の打ち合わせ精度が上がります。その彼が、建設会社にとって、どれだけ貴重な存在か想像してください。IT業界以外にこそ、ITリテラシーが必要なのです。神頼み僕は、年が明けると、いくつかの神社に初詣に毎年行きます。神前で、今年の抱負を語り、加護を求めます。神が本当に助けてくれるのか?という議論が、昔ありました。その時の結論は、確かこうでした。『あとは神頼み』というところまで、手を尽くす。手を尽くした事を確認するために、最後に神頼みするんだ。テストの手を抜いたところから、見透かしたように不具合が噴出したりするものです。パソコンに心はあるのか?パソコンは、人を見て不具合を出したり、たまに機嫌を損ねたり、まるで意思があるようにふるまうものです。パソコンには、心があるのか?たまに、この話題が出ますね。本当に心があるかは別として、経験則です。感情を持っている振りをすると、見破れないそうです。我々が、本当に心を持っているのか、本当は誰も心など持っていないのか。哲学的な問いは、僕の好むところです。OSを作るといい質問サイトQuoraよりプログラマーが少なくとも1回は作るべきプログラムは何ですか?という質問がありました。僕は、こう答えました。作るべき、という言葉の定義*『作るべき』という言葉の定義を、ここでは『やらなければ失格の、必要条件』ではなく、『作った事があれば、どなた様でも理想的』という意味で解説します。OSがおすすめズバリ、OSです。OSは、ロマンがあるので作るべきでしょう。普段、我々が使っているパソコンは、電源を入れた時に、どこから最初のプログラムをロードするのか、それがどのようにして、日本語の文字を表示させるのか。そのように、小さなプログラムが無限に発展してゆく様子を、感じ取る事ができます。ふだん使うOSのありがたみWindowsなど、普段触るOSがどんな働きをしているのか、ふだんプログラムを作るうえで前提となっている部分のありがたみを知り、動作を理解することで、プログラマーとしてのスキルは大幅に向上するはずです。ついでに、『ハードとしてのパソコンに、自分の書いたOSでイチから描画させる』というハード寄りの楽しみもあります。OS作りを、強くお勧めします。脳を味方にしましょう脳を味方にしましょうあなたの脳について、あなたはどれだけ知っていますか?この記事では、脳科学のエッセンスを取り入れ、人生がうまく行くヒントを提供します。自分の脳を上手にコントロールすれば、自然と爆発的な力を出す事ができます。脳は食いしんぼうもののサイトによると、脳は相当大食らいのようです。https://www.kango-roo.com/sn/k/view/3725脳が必要とする血液量は、脳組織100gに対して1分当たり50〜60mL、脳全体では1分当たり800mL前後です。1分当たりの心拍出量が約4.5Lですから、脳に流れ込んでいる血液量は心拍出量の1/5〜1/6にも達します。この記事の最後で、脳を上手に使う方法を解説しますね。プログラマーに必要な脳力は?プログラマーは頭脳労働なので、いろいろな脳力が必要ですが、まず思いつくのは、『鮮明に想像する力』です。これから作るシステムの動作や、それによって生まれる喜びを鮮明に描く。作る最中に、動作のイメージや、部品同士が連携するイメージを持ち、うまく行きそう、うまく行かなそう・・・とシミュレーションしてみる。これらの事を、脳内のメモリーを最大限に使って、鮮明にイメージするのです。脳を鍛えるには?あなたの脳に最高のパフォーマンスを出させるため、気をつけると脳にいい事は、たくさんあります。あるのですが、今日は1つだけシェアします。『ながらスマホを止める』これです。スマホに限らず、『ながら』をやると、脳は意味なく疲れます。『食べる』と『見る』の間に、脳の切り替えが頻繁に発生するので、それだけで脳が疲弊するのです。『微妙に達成感がある』という、悪いおまけ付きです。昔のしつけでは『行儀が悪いからやめなさい』と言われましたが、脳科学的にも、理に適っているのです。礼儀作法というものは、先人たちが検証を済ませた、人間にとって得する行いの集合知なのですね。複数のURLを一括で短縮したい。複数URLは、EXCELからコピペで入力完了できたほうがよい。OS依存は許されない。『EXCELでちゃちゃっと作る』が思ったより面倒そうでした。WinHttpのライブラリが、macにはなく、クエリテーブルを使っていかないと、URL短縮用のhttpリクエストを投げられません。何かスムーズでないものを感じ、いったんやめました。Platform・・も一旦やめたGCPでWebサービスを作ろうかと思い、Pythonのプロジェクトを作りました。Rubyでもいいのですが、バージョンに苦しんだ事もあり・・・さて、Webでやるとなると、EXCELからの複数行貼り付けが難しいです。複数行を取って複数行を返すところが面倒くさいです。GoogleSpreadsheetにしましたSpreadsheetなら、ほぼそのまんまの記事がありました。https://webapps.stackexchange.com/questions/76050/google-sheets-function-to-get-a-shortened-url-from-bit-ly-or-goo-gl-etcこれを改造して、左端の行すべてを短縮するように変えました。クリアを付け、URLがない時にスキップする処理など、ガード系の処理を入れました。ひとりツールとしては完成EXCELからの転記も問題なくできるので、ひとまずSpreadsheetでたたき台完成としました。不特定多数の人に使ってもらうとなると、もうひと工夫、ふた工夫必要ですね。