satoryuの日記

忘れっぽいから覚えてるうちに書いておかないと。

docx v0.5.0 をリリースした

Wordなどで作られるOffice Open XMLファイルをRubyで扱うためのライブラリdocx のコミット権を昨年末にもらった。 今の所、既にあるIssueを整理し、既に出ていたプルリクエストをmergeできるものから取り込んでいった。 それらをまとめてv0.5.0としてつい先日リリースしたので、ここで今回のリリース内容を紹介します。

https://github.com/ruby-docx/docx

機能拡張

Added opening streams and outputting to a stream #66

これまではdocx形式のファイルしか扱えなかったのですが、このバージョンからストリームを扱うことができるようになりました。

Added supports for Office 365 files #85

前置きをしておくと、docxファイルはXMLファイルをzip圧縮したものです。展開してできたXMLファイルの構成やスキーマがOffice Open XMLで決められています。

通常であればdocument.xmlに本文のデータが保存されるのですが、Office365が生成するdocxファイルだとdocument 2.xmlに保存される事が報告されました。 そのようなファイルもこのリリースから扱えるようになりました。

バグ修整

  • Docx::Document handles a docx file without styles.xml #81

たまにプレインテキストのように、何の装飾もされていない文書があるようで、そういったファイルにはそれを記載するstyles.xmlが含まれていない事がわかりました。 これまではそのようなファイルを読み込もうとするとエラーになってしまったのですが、このリリースから問題なくその他の文書データを読み込めるようになりました。

  • Fixes insert text before after were switched #84

文書のブックマークを指定し、その前後にテキストを挿入するメソッドがそれぞれあったのですが、メソッド名とやっていることが逆だったので直しました。

バグ、リクエストの報告先

GitHubで受け付けています。 何かお困りの点がありましたら下記からIssueをオープンして下さい。

https://github.com/ruby-docx/docx/issues/new/choose

Agile PBL祭りに行ってきた。 #agilepbl

個人スポンサーとしてエントリーしていたAgile PBL祭りに参加してきた。

agilepbl.com agilepbl.connpass.com

個人スポンサーした経緯についてはこちら。 satoryu.github.io

Twitterで一時トレンド入りした #agilepbl のまとめ togetter.com

北は北海道、南は沖縄から、プロジェクトベースドラーニング(PBL)でこの1年間チーム開発をしてきた学生の方々の発表とブースでのデモを拝見させてもらった。 「祭り」という名にふさわしく、ブースの準備段階からすでに賑やかな雰囲気が出ており、「楽しい」雰囲気で会場が終始満ち溢れていたように感じた。

f:id:satoryu:20200221100439j:plain

プレゼンがとてもうまく、デモも楽しそうにプロダクトを見せてくれた。 いずれのチームも話を聴いていると、プロダクトで解決したい課題が、メンバー自身が当事者であるということが共通していた。 「こういうものがあると便利そう」といったものではなく、自分たち自身でプロダクト自体を評価できるので、どのチームも自分たち自身で使う、ということを当たり前のようにやっていた。 なぜそこにこのボタンがあるのか、など聞いていっても、どういうシチュエーションでどういうことのためなのか具体的に説明してくれるチームばかり。 そんな人、なかなか開発の現場で見たことないぞ… 良いものを想像して作ることをあたかもすごいことだと思っていたりするPOやステークホルダーがいたりする。 「きっとこういう人がいて、こういうシチュエーションがもしあったら」という前提条件ばかりが多すぎて、作る意味があるのかがわからない。検証するにも、そういうユーザーがいるのかどうかも探しづらいような状況がある。 きっと、彼らは自分たちで色々試せる環境を作れたのだろうな。とても素晴らしい。 あるチームのデモブースでプロダクトを見せてもらった時、「実際に彼(PO)が普段使っているんです」と聞いて、素晴らしすぎると思った。 え?当事者じゃないですか。

懇親会で学生と話を聞いていると、始めからチーム開発をやりたいという思いはなく、「単位のため」といった学生としては当たり前の目標だったようだ。 けれどもチームで活動をしていく中で、お互いのことがわかるようになり、この活動自体をとても楽しいと思えるようになっていったという。 終いには、「単位もらえなくてもいいから作りきりたい」とか「単位なしで来年も履修したい」とか言っていた。 途中で脱落してしまう学生も何人かいたようだったが、残った学生たちは単位だけでない何か価値を見出したんだろうな。 話の中で、「グループからチームになれた」といったことがサラッと出てきた。 チームで意見が対立していても、プロダクトを良くしたいという同じ想いが共有できてたので、安心して意見をぶつけ合えていた。って言ってた。え、ちょっと待って、それって最近悲しくもバズワード入りしちゃった心理的安全性さんの本来の姿ですよね? きっと彼らが得た単位以外のものの1つは、チームなんだろう。 そりゃ、楽しいだろうな。

懇親会では、昨年度の履修生で今年度はTAと今年度の履修生とで話をしているのを近くで聞いていた。 今年度のチームでの活動の中で感じたことを今年度の学生が語ると、それについて大きく頷くTA。 良い授業が再現されていることがここで証明されている気がした。 TAになった彼は、チームでの活動が楽しくて、今度はそんなチームを支援する側に立ちたかったらしい。 その話を今度は履修生が大きく頷く。 この世代交代の流れ、もしかして無限に続けられるのでは?

日中のプレゼンやデモブースもそうだったんだけど、懇親会会場*1の風景を見ていると、どこに先生がいるのかわからないくらいに溶け込んでいた。 PBLは、作り固められた授業のコンテンツを提供するようなことは難しいので、先生たちの中にも試行錯誤がたくさんあったのだと思う。 その都度、先生たち自身が悩んでいる場面を学生たちの前で見せていたようだ。 それを見て、授業を良くするための意見を言うと先生たちは聞いてくれる。 その経験が学生たちにとって新しい体験だったようで、自分の授業を良くするということを考えた、なんてことを教えてくれた。 学生が先生と同じ目線に立って授業を良くすることを考える、ってどんだけ運営すごいの?

残念ながら、それぞれのプロジェクトは終わってしまった。 でも、どのチームの人たちもとても楽しく自分たちのチームのこと、プロダクトのことを語っていた。 「まだ続けたい」という悔しい気持ちを残しつつ終えてしまう。 チーム活動から生まれた関係というのはそうそう崩れるものではないと思うので、また別のプロダクト開発でもプロダクト開発以外でも何かやってみると面白いことになるんじゃないかな、って思う。

残念なことに、enPITというプロジェクトは来年度までということらしい。 なので、このAgile PBL祭りのような場の元になるPBLを実施する土台が来年度で無くなってしまう。 「弊社、アジャイル開発やってます!」って普段言ってるオジサマ・オバサマ達は、この取組が継続できるような支援をしてあげてほしい。 学生のひとたちにとって、どの会社がアジャイル開発をやっているかは知らない。 なので、採用の観点として、この授業を支援することで会社の認知度を上げる、というのはいかがだろうか。 もちろん、金は出すが口は出さないままで。 他にも企業なり自治体なり石油王なりがこの授業を支援するためのアイデアがあったら、ぜひ渡辺先生にお伝えしてほしい。 ちなみに、作ったプロダクトのソースコードなんかは、権利上問題無ければ、ぜひGitHubなどでOSSとして公開してみてはどうだろうか。緩やかに開発を続けるためにも、もしかしたら知らないところで使いたい人が見つかるかもしれないので。

さーて、きっと今頃先生たちはロスってるんだろうな。

*1:そんな大層な場所ではなく、居酒屋のこと

UglifyjsWebpackPluginが非推奨になったので乗り換えた

Vue.js やらWebpackやらPWAを勉強するために小さいアプリケーションを作っていたのだが、それがいつの日からかリリース時のビルドのみ失敗するようになった。

TL;DR

修正したPull Requestはこちら。 github.com

何に乗り換えるか

そもそもUglifyjsWebpackPluginは、2ヶ月ほど前に非推奨(deprecated)になっているのを見つけた。 GitHub - webpack-contrib/uglifyjs-webpack-plugin: [deprecated] UglifyJS Plugin

それを継ぐ選択肢として、terserを用いたterser-webpack-pluginがある。 しかし、そもそも今作っているアプリではBabelを使っていたので、依存をなるべく減らすためにもbabel-preset-minifyに乗り換えることにした。

使い方

まずはUglifyjsWebpackPluginをアンインストールし、babel-preset-minifyをインストールする。

npm uninstall -D uglify-webpack-plugin
npm install -D babel-preset-minify

次にWebpackの設定ファイルを以下のように変更する。

  module: {
    rules: [
      {
        include: [path.resolve(__dirname, "src")],
        loader: "babel-loader",
        options: {
          plugins: ["syntax-dynamic-import"],
          presets: [
+            "minify",    # <= 追加
            [
              "@babel/preset-env",
              {
                modules: false
              }
            ]
          ]
        },

        test: /\.js$/
      },

単に、babel-loaderのオプションの1つであるoptions.presets"minify"を追加するだけだ。 もし、babel-preset-minifyのオプションを指定したい場合、"minify"の代わりに以下のようなオブジェクトを渡す。

[
  "minify",
  {
    "removeConsole": {
      "exclude": ["error", "info"]
    }
  }
]

ちゃんとwebpack --mode=productionのときだけminifyしてくれるので、十分使えそう。

参考

Azure クラウド基礎講座に参加して、AZ-900を取得した

f:id:satoryu:20200206191808p:plain

今年は、色々と真面目に技術のことを勉強したいと思い、資格試験を受けてみようと思っている。 そこで、以前からMicrosoftさんが頻繁に開催している基礎講座に参加して、AZ-900 Azure Fundamentals を取得しました。 参加するだけで資格受験のための無料バウチャーも貰えるので、費用は完全無料でした。

microsoft-events.connpass.com

基礎講座について

これは9時30分から16時ころまでの講義形式のセミナーです。 講師はマイクロソフト社員の方*1。 内容は、もちろん資格試験Azure Fundamentalsをカバーしており、なおかつ試験対策についても教えていただけました。

また、資格の詳細のページに行くと、その資格勉強のためのMicrosoft Learnのコンテンツへのリンクがあります。

docs.microsoft.com

それらも予習として予めサラッと気になるところを流して見ていました。 当日の講座の内容とおそらくほぼ同等だと思います。

次の目標

Azure Fundamentalsは、その名前の通りに、基本的なことを理解しているかどうかの資格です。 次は、開発者として、Azure Developer を狙ってみようかと思います。

docs.microsoft.com

*1:遅刻して参加したのでお名前を聞けなかった。

GitHub Sponsors に登録した。

タイトルの通りGItHub Sponsorsに登録した。

GitHub Sponsorsとは

GitHubスポンサーのことではなく、GitHub上で自身のスポンサーを募ることができるサービスがGitHub Sponsors。

help.github.com

スポンサーするにはGitHubアカウントがあればできるが、スポンサーを受けるには審査が必要になる。 特に難しいことはなく、身分証明書と税金の支払いに関する情報を入力し、審査を待つだけだった。 自分の場合、身分証明書には運転免許証を使用した。 米国からの支払いの受け取りになるので、W-8BENという書類を作成しなければいけない。 これもオンライン上で作成できる。 Foreign Tax Identification Numberの項目に何を入れればいいのかわからず少しハマってしまった。どうやらこれは、マイナンバーの番号を入力すれば良いらしい。

スポンサーは対象のユーザーに月額定額でスポンサー費を支払うことができる。 この定額のプラン(Tier)を作成することができる。

なぜ登録するのか

自分の場合、OSS開発は、自分が書くコードで世の中に何か貢献したいという気持ちでやっていることが多い。 けれども、時間を割いている活動であるため、そこに投資できるには限りがある。 ましてや、仕事や家庭が忙しい時期に、このようなプライベートでの活動は優先順位が下がりがちになったりする。 そこで金銭というものが、OSSの開発をするためのモチベーションの1つになるのかと思った。 このスポンサーという仕組みを使うと、どのようにOSS開発が促進されるのか自分自身で試してみたいと思い、登録してみた。

ということで、ご支援してくださる方、お待ちしております。

github.com

アジャイルレトロスペクティブズを読んだ

自分はふりかえりについてはあんまり手数を持っていない。 KPTやYWTや最近だとFDL*1をやったりなんかしていて、それぞれやっていて意義があるのだがマンネリ感は常に伴うような気がしていた。 この本を開く前に期待していたのは、ふりかえりのやり方の手数が増えることだった。

この本は、ふりかえりのファシリテーターに向けた本である。 ただふりかえりだけではなく、場の設定からクロージングまでのアクティビティが書かれている。 それぞれのアクティビティには、著者EstherとDiana彼女らの経験に基づいた例として掲載されている。 ファシリテーター(おそらく1人)がチーム(こちらは多数)に対してどう振る舞うと良いのか、各アクティビティが実際にどのように使われるのかが例として載っているのは、イメージしやすかった。

アジャイルスクラムをあーだこーだ言うより、現状を見て次の一歩を考えるために、ふりかえりは一番導入しやすいものだと思うので、これからアジャイル開発をやろう!という人はここから始めると良いのではないだろうか。

内容とは直接関係無いが、訳者の角さんが書いている「訳者ふりかえり」は角さん独特の文章で好き。

*1:Fun!Done!Learn!

Regional Scrum Gathering Tokyo 2020 へ行ってきた。 #RSGT2020

f:id:satoryu:20200113235101p:plain

2014年から参加しているので、もう年初の慣習と化している気がする。 でも、今年は一般参加者として参加する初めてのRSGT2020でした。 2014年はパネリスト、2015年から当日スタッフ、2018年が実行委員、2019年で再度当日スタッフ。 まだやってないのはキーノートくらいか。

セッションの内容とか、冬の寒さをふっとばすような熱いレポートはTwitterからザクザク出てくるので、そちらを探してください。

twitter.com

初日のキーノートは、真面目に前の方の席で参加してみた。 相変わらずのコープ節というか、エンターテイメントというか、表現力が豊かというか 同通レシーバーの使い方や自分の利き耳がどちらなのかわからずにあたふたしてしまった。 結局、目の前に本人がいるのだから、英語で聞くことにした。 しかし、英語がわからないのか、自分の経験が浅いのかわからないが、しっくりとこなかった。 というのは、もうここ数年はスクラムをやってないからなのかな、と思った。 あー、僕は初心者なんだな、と。 色々セッションを聞いてまわった。色々考えさせられる話ばかりだったのだけど、まだいまいち整理できていない。 もう少し何度かスライドを見返したり、何か自分でやってみたらまた何かわかるようになるのかもしれないのかなぁ。

他の参加者の人たちを見てみた。 どのセッションも座席が前の方から埋まっていた。 自分もなるべく前の方に席を取るようにした。 運良く席を取れることが多かったが、後ろをみると立ち見ができたりするセッションもあったりして驚いた。 なんて意欲だろう。 ネットワーキングパーティでは、色々話をしたい人たちと話ができた。 今何をやっていて、何に困っていて、どうしようしているとか。 こんなことを言ったら失礼かもしれないが、かっこいいことをしている話ではなかった。 だけれど、何か目指してるものがあって、それを楽しそうに話をしていた。 今、自分は何をしようとしていたんだっけか。 そういうことを帰り道でぼんやりと考えていた。 何も思いつかなかったのか、それとも遅くまで飲んでいたせいなのか、その答えは覚えていない。 そうだ、それと、ここで初めて会った人もいた。 普段Twitterでは見かけていた人が会いに来てくれて、なんとも言えない照れくさいものがあった。 「会えて嬉しかったです」と言われて嬉しく思うのは何なのだろうか。 あと今年やってみたかったことが1つあって、それは「毎日終わったあとに流れに任せて誰かと飲みに行く」ことだった。 スタッフだと疲れて帰りたくなってしまうし*1、これまでの懐事情という個人的な理由もあってなかなかいけなかった。 札幌の人だったり、大阪の人だったり、いろんな人と話ができた。 ただお名前伺ってない人が何人かいて、もったいないことしてしまった。 セッションで色々聞いて思ったことを吐き出す場所がほしいのだろうし、スピーカーとか界隈のあの人と話したいというのがあるのだろうな。

OSTでは、自分も1つだけセッションを持ってみた。 どんな人が来ていて、どんな話ができるのか楽しみだった。 プロポーザルは出していて、ちょこっとはLikeを貰っていたので、何か一緒に話ができる人がいるかもしれない。 でも、スクラムとはほとんど関係ないテーマだったので、誰も来ない覚悟もあった。 周りでいくつかのグループがわいわいとディスカッションが始まる中、そのとき、1つのテーブルを自分だけ一人占めしていた。 そこに、@Akapon2010 さんが来てくれた。 ソースコードの読み方とかについてのお悩みに自分なりに答えていて、色々と眼の前でメモを書き起こしてくれた。

f:id:satoryu:20200114012821p:plain

脇で @tnagasawa さんが相槌打ってくれたのもとても嬉しかった。 沢山の人に来てもらったらそれはそれで嬉しかったのだろうけど、自分の想いに共感してくれる人や喜んでもらえる人が一人でもいたら、それは 普段自分がやってることを言語に出来た感じもあって、自分としてもありがたい時間だった。 @Akapon2010 さん、ありがとうございました。

もっとギャザりたいからアジャイルラジオの公開収録があると聞いて、参加してみた。

agileradio.github.io

ほんとみんな楽しそうにしてるなぁ。 そして、となりでプロポーザルのネタだししてるきょんおよの声がデカい。 どんだけ楽しそうにしてるんだよ。最高か。

1日目から廊下でとあるスタッフに会う度に「前説お願い」というのをずっと言われ続けていた。 仮にもし本当にやるハメになったらと思って、ネタの準備をしていた二日目の晩。 三日目の朝に、秋葉原のオフィスに置いてある自前の法被を取ってから御茶ノ水に向かっていた。 クロージングキーノートの高橋さんのことは少しは知っていたけど、今回のキーノートの概要を読んで、過去のRSGTのウェブサイトとか見て、今年の3日間のことを思い出してみた。 今、この楽しい空間があることがとても奇跡なんじゃないかって思えた。 何がこの空間を作っているのかはわからない。けれど、その一回目を支えてくれた高橋さんに最大のお礼を表現したい、と参加者として思った。 僕はただつまらない話をしているのに笑ってくれたし、お願いしたとおりに良い拍手をしてくれる参加者がとても素敵だった。

高橋さんの話はとてもエモかった。


69 / ONE OK ROCK 2017 Ambitions Japan Tour in SAITAMA SUPER ARENA

あー、僕が生きているうちにやり遂げたいこと、遂げられなくてもやりたいことって何だろう。 人生じゃなくてもいい、この一年だけでもやっていきたいことってなんだろうか。 そうしたら、来年にはプロポーザル書けるかな。 そしたら、OSTで嬉しいと思えたものがもっと嬉しいと思えるようになるかな。 クロージングノートあとの拍手は良い音だった*2。 後ろから見ていて、良い風景だったなぁ。

帰り道で思った。 来年はもっと話をしたい。 何を頑張るかは決まってないけど、この1年を頑張ろう。 そしたら、同じように頑張ってる人たちに来年また会える。 それはきっと楽しいだろうな。

*1:スタッフでも行く人は行く。

*2:自画自賛です。