2021年10月31日日曜日

Kansai WordPress Meetup@京都に参加して・・・ #wpmeetup #wpmeetupkyoto

今回のテーマは「WordPressサイトのセキュリティを見直す」とのこと。

大学で運用している WordPress サイトのサーバーは、すべて外部の Web ホスティングサービスへ移行(ほとんどは大学が契約している外部ホスティングサービス)して、もうすぐ1年が経とうとしています。セキュリティ周りについてもいろいろ見直してきましたが、そうしたセキュリティ関連の話を聞けるということで楽しみにしていました。

プログラム:https://www.meetup.com/ja-JP/Kansai-WordPress-Meetup/events/281036210/

おお!?外国人が入ってきて、「日本語でしかやっていないの?」という質問がありました。カフェからの参加でしょうか、英語でのやり取りが見えるので海外からの参加のようです。最初にアンケート(日本語)があったのですが、そちらに回答しない?というやり取りを主催者として、アンケートをされていました。これはオンラインならではのやり取りで面白かったです。

以下、筆者が理解した内容を文字にして書き出しています。そのため、実際の講師の方が意図した内容ではない可能性があることをご留意ください。

WordPress セキュリティガイド 〜うんねい可能なセキュリティを始まるために〜

Yoshinori Matsumoto氏 (Twitter: @ym405nm), WordCamp Kanai 2016で登壇

WordPress 危ないから使わないという話があるが、CMSを変更しても問題は解決しない。必要なことはどのように安全につかうのかということ。

WordPressのログインを守る

wp-login.php (XML RPC含む) が狙われやすく、IPアドレス制限のような負荷をかけることができるのか。あるいは 2要素認証、アカウントロックの機能を入れるという代替もありである。このあたりは、ユーザーがどのように使うのかを考えるということとなる。

パスワードポリシーについて

簡単なものを使われないようにする。Jetpackプラグインに、サイト保護、ホワイトリスト等保護機能を備わっているのでそうしたものを利用できる。

ログイン大丈夫?

WordPress よりも権限の強い、SSH、FTPやサーバーのログインが不正アクセスされると危ない。そのため、WordPress だけを考えるのではなく、そうしたところも考える必要がある。

wp-login.php をIPアドレスをブロックしているが効果はあるのか?

効果はないだろう。IPアドレスはその都度変更されるため。

筆者補足: IPアドレスの範囲(Apacheならホストを使える場合あり)が固定できるなら有用だろうと思う。

BASIC認証をログイン画面にいれるのは?

面倒にしてまでのメリットはない。特にデメリットが大きい。

筆者補足: BackWPUPなど、BASIC認証が有効な場合にはバックアップが拒否されるケースがある。このプラグインではBASIC認証をしていた場合の設定があるので、それをすればいいが、そのあたりを運営側がわかっている必要がある。組織的に管理するなら検討の余地はあると思う。

脆弱性情報を確認する


脆弱性への対応としては、WordPress 3.7 から導入されたオートアップデートを使うことが。これはメジャーバージョンアップはできない。5.7だと 5.7.1 は可能だが、5.8へのオートアップデートはできないということ。WordPress は最新バージョンしかサポートしないことの注意が必要

JPCERT/CCの注意喚起、ホスティング会社の情報はチェックするとよい。

注意事項としては、「認証なし」「外部から」「コード実行」などのキーワードが入ると、特に注意をするとよい。またオートアップデートが動いているかのチェック。

PHPのバージョンが古すぎないか、Webサーバーのバージョンが古すぎないか、Firewallなどサーバーのセキュリティ状況などを調べておくのも大事。

プラグインとテーマを選ぶ


プラグインは、脆弱性を悪用され任意コードが実行されるものが含まれている場合があり(開発者が放置しているプラグインだと危ない)、そこも注意する必要がある。

WebShell 系を仕込まれている場合もあるので注意。

バックアップは大事。無料でバックアップできても、リストアが有料だというプラグインもあるので注意。

WordPressの関数を使う

WordPress が提供するセキュリティ関連の関数はあるので、そうしたものを確認しよう!

事故現場でよくみられるパターン

ファイルアップロードを自前で作ったが、アップロード認証をミスってだれでもアップロードできるようになってしまった。SQLをデータベースに送って処理するプログラムに不備があって、脆弱性になってしまった。

事故はおこってしまう

起こるときには起こってしまう。

50万円ぐらいで構築したサイトが事故ったら・・・初期調査だけで25万円ぐらい掛かってしまった事例もあった。またお金をかけて調査をしても原因が特定できない場合もある(詳細ログを記録していなかった等)。そのため、作り直したほうが速いということになってしまう。あるいは事故が起こった時が明らかで、それ以前のバックアップがあるなら、そこからリストアするということも選択肢としてありえる。また事故ると様々なところに報告が必要になり、膨大な時間と費用がかかってしまう。

質疑応答

以下、質疑応答で興味があった部分の端書きメモ的なもの。

管理者以外 SSO(Googleとか)を使ってログインに使っていることもある。JetPackだと wordpress.com のアカウントにおけるSSO認証ログインが使える。

パスワードに加えて、足し算をして正解しないと管理画面に入れないようにしているが、効果はあるか?

  • 現在の汎用的な総攻撃的なログインは、パスワードが安易すぎるので効果はある。しかし、本当にサイトをピンポイントで狙われると効果が発揮できるかはわからない。
  • 上記リンク先の足し算については、たとえば Google DriveのOCR機能にかけたら正しく文字起こし出来てしまうので、効果そのものはあるが、そうした攻撃をされてしまう恐れはある。
reCAPTCHAは視覚障害者が使えない
  • そのとおり。なかなか難しい
PHPMailerの脆弱性問題があって WordPress のバージョンアップに追われたが皆さんどうしているのか
  • メジャーバージョンアップだと辛いので、細かくバージョンアップするか。そのアップデートを外注するなどするのがよい。
duplicatorプラグインの脆弱性の件で、バックアッププラグインは共通で狙われるのか
  • セキュリティレベルについては、無料か有料かはあまり関係ないとは思う。
OWASP 脆弱診断結果として、どこまで対応したらいいのか
  • レベルだけみても判断できないので、出来ることが限られてしまう場合がある。

座談会


*まったりと始まったが、基本的には講師、司会者以外はチャットでのやり取りとなっていた。

攻撃は海外からきているので、パスワードをローマ字打ちにするというのも効果がある。それが世界的に有名なキャラクター名だと駄目だろうと思う。oを0に置き換えるなどは破られているように思うので注意。

マルチサイトだと、SiteGuard WP が使えないので、All in One WP Security、XO Security などを使ったことがある。

WAFは除外設定しないと駄目なケースがある。除外設定ができない場合には、辛し。

utf8mb4 の文字コードでバックアップしていなくて、ラテン文字のいくつかが文字化けしたことがあった(レストアしたとき)

MovableTypeは日本語ファイル名を英数字に変えてくれる
WordPressでは、 WP Multibyte Patch をいれることで、日本語ファイル名をアップロードすると、変換してくれる。

2021年10月31日 @kimipooh

2021年6月28日月曜日

WordCamp Japan 2021 Online に参加して #wcjpn21 #WordCamp #WordPress

スタッフとして担当以外、実際にガッツリ参加したのは、Day 1 と Day2 でした。

最終日の Day 7 は少し体調を崩していたこともあって、アフターパーティのインフォメーション担当を終えたあたりから眠気がおそってきたこともあり、そこで離脱してしまいました >_<; 金曜日のもくもく翻訳会も参加できなくて残念!

聞き逃したセッションは、下記の WordCamp Japan 2021 の YouTube チャンネルで視聴可能です。

Twitter 上での皆の感想が温かい!


開催中、開催後も Twitter をチェックしてましたが、皆いいコメントばかり!
ブログでも、「実行委員の案内がよかった」「oVice という空間はとてもよかった」などの投稿も結構ありました。
上記公式サイトのブログまとめや、副実行委員である Naokoさんのブログをみると、世界中から 1380名もの参加登録があったとのこと。ものすごい人数ですね!

Day 7 の雰囲気


最終日のセッションを視聴している人は結構多かったと思います。


閉会式では、実行委員長からの謝辞が述べられました。スタッフは 筆者も含めて70名以上参加しており、それらの規模をうまくまとめた実行委員長、副実行委員長、各班長の皆様ご苦労さまでした!


アフターパーティが開催したのち、実行委員から想いなどを語る座談会のようなものが催され、結構な人数が視聴できる範囲へと集まっていました。oVice では視覚的にどの程度あつまって視聴しているかを感じやすいのでよかったです!


スポンサーブースツアーもアフターパーティの最中に開催されましたが、大盛りあがりでした!もはやどこに自分がいるのか分からないカオス的な状況に!


このあたりの途中で、筆者はダウンしてしまったのでした...

次回の WordCamp がオンラインになるのか、対面式あるいはハイブリットのような形になるのかわかりませんが、何某かの形で参加したいと思います!

2021年6月28日 @kimipooh

2021年6月21日月曜日

WordCamp Japan 2021 Online に参加して - DAY 2 - #wcjpn21 #WordCamp #WordPress

DAY 2 となる本日は、コントリビューターデイズになります。
タイムテーブルにあるように、本日は WordPress コア、 Learn WordPress、そして翻訳の3つについて、実際に手を動かして参加することで WordPress に対して貢献してみようという日です。

筆者は、翻訳について参加しました。

Day 2&6 翻訳: 「お世話になってるプラグイン・テーマを翻訳してみよう」



タイトルにあるように2日に分けての開催になります。
スタッフ入れて 30名近い人数が参加した模様。


翻訳については WordSlack の #translate, #docs で質問などしながら進めていく。
海外からの参加者もあり。

自己紹介 - 参加者が気に入っているテーマやプラグイン

事前に動画みた?



参考



注意事項
Stable と Development の2つがあるが、 Development はまだリリースされていないものになっており、基本的には Stableの翻訳をするのがよい。Development のほうはせっかく翻訳してもリリースのときに変わってしまって翻訳が無駄になることもある。またStable のほうと同じ翻訳内容があれば、Stableのほうを翻訳すると、同時に Development にも自動反映される。

Stableがない場合


たとえば、下記の事例の場合、
https://plugins.svn.wordpress.org/tweet-old-post/tags/9.0.2/readme.txt をみると、バージョン(Stable tag)に開発版 trunk を指定してるからだと思う。こういった場合には、Development を翻訳すればよいということになる(そういう開発手法を開発者がしているため)。

テスト環境

テーマやプラグインを翻訳する場合、どうしても動作を確認しないとどういう意味か分からない場合がある。そのため、Local 等のローカル環境を用意するのがよい。筆者は、MAMPを使ったWordPress を WP-CLIで自動インストールツール でインストールするのに慣れているため。

何を翻訳するか

あまり多すぎると終わらないので、100ぐらいのもので自らが使ったことのあるプラグインにすることにする。
が 100に近いぐらいなのでいい感じがする。基本的には BackWpup でバックアップしているが、手軽にDBのバックアップとリストアができることもあって、こちらのプラグインも併用している。のでこれを翻訳しようと思う。

承認された翻訳が 90% を超えると翻訳が適用されるようになる。
日本語への翻訳について承認されるためには、WordSlack の #requests に要請することになる。

すでに翻訳されている場合には、その翻訳情報も参考にして整合性を保つことも考えてもいいかもしれない。

翻訳前の状態

手持ち環境に翻訳するプラグインをインストール



メニューなどは英語の状態である。

翻訳してみて

意味のわからない言葉、たとえば missing だけの場合、???となるでしょう。
そこは References の▶ をクリックすることで、プラグインのどこの部分で使われているかの情報と実際のコードへのリンクがでてきてチェックすることができます。


これをみて


をみると、 passthru() 関数がなかった場合などに表示される missing を出すものだということになります。この場合には、「見当たりません」というのがよさそうな翻訳だと思います。

次のEvery も訳すのが難しい。
Every 1 Weeks なら毎週1回と翻訳できるが、Every だけだと毎 としてもおかしいし、これは訳せない。つまりは Every のままがよいということになる。


あとチャットで指摘された部分としては、下記の () 括弧の右側に半角(1バイト)空白が入っているので、翻訳後のものにもそれをいれておくこと!というもの。こういうところは気をつけないとうっかりすることがある。


時間中には 13 (残75)ぐらいしか翻訳できなかった。まぁ、このブログを書きながらということもある。oVice に入りつつ、そのまま継続して翻訳。

夕食を食べる 19時点で、58 (残30) までになりました。もう一息!!!
夕食を食べ終わってモクモクすること小一時間、19時52分でようやく翻訳完了


さっそくWordSlack で承認要請をしてみた!!



あとどうなるかは、今後ウォッチするということで、本日の翻訳作業は終了となりました!

その後翻訳レビューを受けて・・(2021年6月24日)




WordSlack の #requests チャンネルでいくつか指摘を受けたので紹介します。
レビューしてくださった nao さんありがとうございました!

また、本プラグインの日本語訳の PTE 権限を付与してもらったので、この翻訳は近いうちに反映されることになります。

  • 用語集との相違(→指摘の通り修正
    • フォルダ→フォルダー
    • クエリ→クエリー(ただ、MySQL 用語は「クエリ」かもなんですが… ここはご判断におまかせします)
  • その他
    • https://ja.wordpress.org/team/handbook/translation/translation-style-guide/
  • 1-4. 数字の前後には半角文字1字分のスペースは不要(また、日本語の単語の間にも不要です)
    • 指摘の通り修正
  • 2-3. “” (二重引用符) で囲まれた単語がドメイン名や関数名など英字の場合はそのままの引用符、日本語の場合は「」を使う
    • → '%s' ==> 「%s」としていたのを '%s' に戻す
  • 3-1. 自然な日本語になるよう、受動態はなるべく避ける
    • 指摘の通り修正(例. ◯◯は、修復されました → ◯◯を、修復しました)
  • Empty → 動詞の場合は「空にする」が良い気がします
    • 指摘の通り修正
  • Drop → Delete と区別するために、このコンテキストでは「ドロップ」がいい気がします
    • 指摘の通り修正(そう翻訳していて結構悩みました。途中からドロップするにしていたと思いますが、一部直していなかったこと、コンテキストのほうはドロップに変更)
  • With Regards, / Every → 実際に表示して確認してませんが、いきなり英語のままだと違和感があるかも?と思ったのですが、もし確認済みで大丈夫そうならそのままでも
    • Every 
      • View original in consistency tool の機能を使って「間隔」といういい訳があったので、こちらに変更しました。もともとは、Every 1 Week(s) = 意味としては 「1週間ごと」であり、1週間毎にバックアップするという目的でした。そのため、毎1週間 というのもおかしいため、間隔 1週間 のほうがいい役のため。となると Week(s) の訳も週ではなく週間となるので、そちらも修正
    • With Regards,
      • 日本語の敬具にあたる言葉で、日本語だと末尾にいれる。ところが英文だとこれに続いて名前などが入る。実際には
        With Regards,
        サイトの名前 管理者(Administratorの翻訳)
        となるので、
        ---
        サイトの名前 管理者(Administratorの翻訳)
        となるように、--- という翻訳にしておいた。

実際に反映された後にチェック



ダッシュボードの更新にある「翻訳を更新」するとめでたく、WP-DBManager の翻訳ファイルだダウンロードされました。


上記のように日本語になったわけですが、右図にある「データベースバックアップファイルを GZIP しますか?」は、直したほうがよさそうですね。これは、前に誰かが訳していたものです。しかしここは、「データベースのバックアップファイルを GZIP 圧縮しますか?」が自然な訳だと思うため、再度修正。またそのうち更新されることでしょう。

2021年6月21日 @kimipooh
2021年6月24日加筆

2021年6月20日日曜日

WordCamp Japan 2021 Online に参加して - DAY 1 - #wcjpn21 #WordCamp #WordPress

 

始まりました WordCamp Japan 2021! 今回は完全にオンラインということ、そして交流の場として oVice というツールが用意されました。筆者も広報チームの一員として、活動したりしてました。

夕方には一部テーブルがカオスな状態に (^^;


何故コントリビュートしているのか?

事前に実行委員から募って撮影された動画が基調講演で流れました。自分の動画が流れるって小っ恥ずかしいものですね..

すでに終了した セッション動画はこちら

今回参加に際して、WordCamp Japan 2021の Tシャツをきてます!

WordCamp Japan 2021 のグッズは、

で売ってます!

Googleブースを覗いて




Core Web Vitals - サイトの健全性を示す重要指標の説明をされていました。Pages Insights で Google Blogger が62% なのはなんでだ〜とは思いますが、まぁ個人ブログなのであまりそこまできにしていません。WordPress サイトだと 65% などでした。またここで紹介のあった Google提供の WordPress プラグイン Site Kit の紹介もありました。


Googleブースでのやり取りを聞いていて出てきた、Chrome拡張機能「Web Vitails」は、Core Web Vitalsを計測するChrome拡張がウェブストアからインストール可能に(海外SEO情報ブログ)でも紹介されているとおり、よさそう。最初は LCPが遅いと出たけれど、一度見たページを再度チェックするとグリーンになるので、キャッシュがきいたのかなぁと思います。

Test My Site - Think with Google もあるということですが、サブドメインはチェックできないようで、仕事場のサイトはチェックできず〜。

セッション間のスキマ時間で紹介ビデオがながれることがあった



あれ、もうセッション始まった!?と勘違いしてしまうほど、自然に出てくる動画。きめ細かい対応がすごい!

セッション - WordPressで始める多言語サイト構築〜どこまでできる?多言語化プラグインまるわかり〜



筆者も WPML, Bogo など多言語化プラグインを使った多言語化サイトをいくつか運用しているので、非常に興味がありました。
Polylang は使っていないプラグインだが、人気があるとのこと。
https://ja.wordpress.org/plugins/polylang/
をみると WPML からの移行もできそうな感じなのは、かなり興味あり。
最近は Bogo を使っていますが、カスタム投稿タイプに非対応ならちょっと考えものですね...

将来的に多言語機能が WordPress コアに実装されるらしい。まだ先の話とはいえ、とてもきになりますね!

その他ブース風景



まったり雑談



  • サーバーってどんなものがいい?
  • さくらインターネット使っているけど、Xサーバーがいいとかきくけどどう?
  • コントリビューターデイズに申し込んだけど、事前準備は?
などなど、いろいろなやり取りをしました。

oVice って離席すると下図のように、一番下に離席者一覧が出てくるみたいですねぇ。

父の日

そう、今日だったんですよね!
ということで夕食は、妻が用意してくれたリブロースステーキをガッツリと食べました。ちょっと食べすぎて胸焼けしてる感じが・・・。


交流会


交流会の背景に変更されました!


マルバツクイズ開始!


えーと、自分が出したクイズでミスったような気がするようなしないような、、、ま、まぁ気にしないでおこう...ともあれ、ものすごく盛り上がってます!!


Winner の記念撮影


歓談


スピーカーアイコンから、かなり近づかないとつながらないから超密集状態!
ということで誰かが別途スピーカー機能を立ち上げて、そちらに繋いだのでした。と思っていたら、直ったのだった。裏でスタッフが頑張ったんでしょうか。お連れ様です。


超密集な体を動かしたい人集まれ〜。ラジオ体操でもしてるんですかねー
道端であつまる人たち、休憩所に集まる人達、、、いろいろなところで盛り上がっているようです!

スポンサーブースツアー



スポンサーツアーもかなりの人数が参加してました!

集合撮影!




いろいろな企画が盛りだくさんだったと思いますが、終わってみればあっという間の一日だったなぁと思います。

明日から、コントリビューターデイズが始まります。筆者も明日21(月) の翻訳に参加します!まだなにをするか全く考えていませんが、楽しみにしてます。
ではまた明日〜

2021年6月20日 @kimipooh

2021年5月13日木曜日

【Google Workspace 専用】 WordCamp Japan 2021の お知らせを Google Chat で通知してみよう!(GAS利用) #wcjpn21

 6月20日から 1週間オンラインで開催される WordPress イベント
 https://japan.wordcamp.org/2021/ より登録可能(無料)

というイベントがもうすぐあるので、ウェブサイトでの告知なども加速していきます。今回はオンラインかつ無料のため、期間は1週間ありますが1週間のうち出張可能な期間はどこかなど悩むことなく気軽に参加できます。皆さんも WordPress にご興味があれば、是非登録してみてください

さて、筆者も実行委員としていろいろやっているので、最新情報チェックを仕事のコミュニケーションとして使っている Google Chat で通知を受けられるのが便利だよなぁと思いました。まぁ Slack なども使ってますので、IFTTT 経由で Slackチャネルに自動通知はできるんですけど、Slackは登録数が結構多いこともあり、常時起動するとなにかに集中しているときに横槍が入りやすいので見たいときにたちあげているんですよね。また Google App Script でそうしたことができるスキルを会得したいというのも目的としてあります。

WordCamp のサイトは WordPress で構築されていますから、RSS情報があります。あとはそれをよく使っている Google Apps Script で手軽にささっと Google Chat へ投稿できたらハッピーです。思い立ったら即実行です!

注意点

この手法は、Google Workspace 専用の Google Chat の WebHook 機能を利用しています。だからこそ手軽にできるわけですが、そうではない場合には Google Chat API 経由での利用になるでしょう。そちらについては、GoogleChat のREST APIを叩いてみるよ スペース情報をとってくる編(Qiita)などを参考にしてみてはと思います。将来的には無料版 Google アカウhンとでも WebHook機能が使えるといいですね!


手順

  1. ATOM形式のRSSのURLを取得
  2. RSS情報のうち最新データの日時を目視で確認する
  3. 投稿先の Google Chat にて Webhook を設定する 
  4. 取得したRSS情報のうち、最新データを 指定した Google Chat へ投稿(Bot)する、Google Apps Scriptコードを新規作成する
  5. 成功したら、投稿した「スレッド」情報を取得し、次回から同一スレッドへ投稿するよう改変
  6. 毎日自動実行するようにトリガーを設定する

手順を理解することが目的のため(自身の備忘録にもなる)、コードについては必要最小限にしています。運用しだせば、「1日以内のRSS情報を取得してデータがあれば Google Chat へ投稿」というのが一般的だと思います。しかしながら、まずはテストする必要があり、日々更新されていないサイトの場合には、1日以内のデータがない可能性があります。したがって、目視で最新データの日付を確認し、その日付を含むように◯日以内という設定をする必要があることに注意。

これがうまくいけば、Google Alert (特定キーワード検索結果をRSSを利用した RSS情報も投稿も可能になるので、いろいろできそうだなと感じています。


参考情報


STEP 1. ATOM形式のRSSのURLを取得


WordPress の RSS情報は、ATOMを始めいくつかのフィードが用意されています。
今回利用するのは、ATOM形式のため、WordPressサイト/feed/atom/ がURLになります。WordCamp Japan 2021 のサイトの場合には、
  • https://japan.wordcamp.org/2021/feed/atom
になります。

STEP 2. RSS情報のうち最新データの日時を目視で確認する


Google Chrome など ATOM形式のRSS情報のソースを表示できるツールを使って、
  • https://japan.wordcamp.org/2021/feed/atom
にアクセスします。

*以下、ソースの説明をしますが、タグの属性は説明に必要な部分以外削除しています。また、説明をする上で分かりづらいタグも消してます。

各記事は
<entry>記事ソースデータ</entry>
の形式になっており

<entry>
  <name>作成者</name>
  <title>タイトル</title>
  <link href="記事のリンク先"/>
  <updated>最終更新日時</updated>
  <category>カテゴリー</category>
  <summary>概要</summary>
  <content>記事本文</content> 
</entry>

などのように並んでいます。
今回コード内で登場するのは、
  1. <title>タグの「タイトル」情報
  2. <link>タグの属性「href」のリンク情報
  3. <category>タグのカテゴリー情報
  4. <updated>タグの更新日時情報
の4つです。Google Chat はテキストにリンクを付与できませんので、実際に投稿するデータは

投稿日時: タイトル / リンク

としています。カテゴリー情報もコードでは取得していますが、今回は使ってません。
2021年5月13日現在、WordCamp Japan 2021 の最新データのうち、利用する部分のデータは下記の通りです。

<entry>
   <title type="html"><![CDATA[はじめての WordCamp わぷーと友達になるインタビュー #01]]></title>
   <link rel="alternate" type="text/html" href="https://japan.wordcamp.org/2021/my-first-wordcamp-experience01/" />
  <updated>2021-05-10T03:33:26Z</updated>
  <category scheme="https://japan.wordcamp.org/2021" term="ブログ" />
</entry>

つまり「3日前のデータ」だということを覚えておきましょう。


STEP 3. 投稿先の Google Chat にて Webhook を設定する 


チャットのタイトル部分の▼をクリックし、「Webhookを管理」を選択。


下記のようにタイトルをつけましょう。このタイトルが Google Chat に投稿されるスレッドの「タイトル」になります。

設定が終わったら、下記のように投稿用URLができます。こちらをコピーして、テキストエディタなどにペーストして一時的にメモ(保存)しておいてください。




STEP 4. 取得したRSS情報のうち、最新データを指定した Google Chat へ投稿(Bot)する、Google Apps Scriptコードを新規作成する


Google Apps Script は、
から作成してください。

そして、下記にアクセスして表示されるコードをコピー&ペーストします。
そして次について変更します。

変更1:投稿先、情報源(RSS)を設定


// Google Chat の WebHookを指定(指定した名前のスレッドで投稿される)
var chat_webhook_url = '保存していた WebHook URLを入れる';

赤文字の部分を変更してください。
もし WordCamp Japan 2021 の RSS以外の RSSを取得したい場合には下記を変更してください。
var rss_url = 'https://japan.wordcamp.org/2021/feed/atom';

変更2:取得するデータの日時指定


var LIMIT_TIME = 24*60*60 * 3;//1日を秒に変換(一番最新のRSSが何日前かで 3の数字を変える)

STEP 2 で確認した最新記事が、「今現在」から何日前なのかを指定します。
本記事を書いている 2020年5月13日では、3日前なので 3と入力しています。

以上が変更点です。

Google Apps Script を保存する


Google  Apps Script の名前(プロジェクト名)を変更するために「無題のプロジェクト」をクリックします。


ここでは 下記のような名前にしています。何をする目的であるのかわかる名前にしておくと便利でしょう。




そして、いまはもう知らない人も多いかもしれないフロッピーアイコン(▷ 実行の左側)をクリックして保存します。


保存できたら、「▷ 実行」がクリックできるになるので、このボタンを押して onMessage 関数を実行します。

初めて実行する場合、下記のように作成した Google Apps Script のプロジェクトをGoogleアカウントに対して許可する処理が必要です。無料版 Googleアカウントの場合には、信頼できないプロジェクトなどのメッセージがでますが、Google Workspace に関してはそうした物がでず、下記のような3つの処理のみになります。




うまくいけば、下図のように実行ログに実行開始、投稿された記事内容、実行終了が表示されます。



この時点で Google Chat には、下記の新規スレッドが投稿されているはずです。


わぷーは、WordPress.org の日本公式キャラクター です。海外の WordCamp も含めて、いろいろなところのマスコットキャラクターとして登場してますね。WordCamp Japan 2021では、四季折々のイメージになっており、塗り絵バージョンも含めて公開されています

STEP 4. 成功したら、投稿した「スレッド」情報を取得し、次回から同一スレッドへ投稿するよう改変


再度、実行ログを確認してみましょう。
そこにある、
"thread" : の "name" : の値「spaces/◯◯◯/threads/△△△」部分をコピーします。




Google Apps Script のコード内にある

//      "name": "一度実行し、ログを参考に threadのnameを入れる。ここをコメントアウトすると新規スレッドになる"

の赤文字部分を、spaces/◯◯◯/threads/△△△ に置き換えます。
そして先頭の // を削除します。

      "name": "spaces/◯◯◯/threads/△△△"

できたら、プロジェクトを保存します。

そして再度「▷ 実行」をクリックして実行してみてください。

うまくいけば、先程のスレッドに追加される形で、同じ記事が追加されているはずです。




STEP 5. 毎日自動実行するようにトリガーを設定する


さて、STEP 4. までで RSS情報を投稿するスレッドが手動でうまく投稿できたのであれば、あとはそれを自動実行するようタイマーをしかけることにあります。

まず最初にコードの

var LIMIT_TIME = 24*60*60 * 3;//1日を秒に変換(一番最新のRSSが何日前かで 3の数字を変える)

の部分を

var LIMIT_TIME = 24*60*60;//1日を秒に変換

として1日以内に更新された記事のみを対象にするなど、更新範囲のルールを決めてください。ここでは毎日早朝の実行されるようにするので、1日以内とします。
もし3日のままでれば、毎日3日内の記事が投稿され続けることになります。

スクリプトの左サイドメニューにあるトリガーアイコン(目覚まし時計)をクリックし、「トリガーを追加」ボタンをクリックします。

下図のように、実行する関数は onMessage とし、早朝に実行されるように設定します。午前と午後をうっかり見間違うこともあるので注意が必要です。


うまく設定できたら、あとは実際にその時間に実行されることを確認します。
場合によっては、2分後などに一時的に設定し直して試すと良いでしょう。



2021年5月13日 @kimipooh