Confluence, Qiita:Team 解約 -> ドキュメントのアーカイブ作業の記録

いくつかの SaaS のサービス解約を行うことになり、ドキュメントのアーカイブ作業を行ったので、そのメモです。主に以下の作業を行いました。

  • Confluence -> GitHub Wiki 移行
  • Qiita:Team 上の情報の HTML 化

Confluence -> GitHub Wiki 移行

Confluence 上の情報の markdown

Confluence の情報は、設定から Export すると、「PDF」「XML」「HTML」の形式が選べます。ただ、GitHubWiki 等に移行したい場合は、 markdown 形式である必要があるため、もうひと手間必要になります。そこでこのツールを使いました。

k-anz/confluence-to-markdown: Confluence to Markdown converter which is actually working forked from meridius/confluence-to-markdown

pandoc を使って、Confluence の情報を markdown へと変換してくれます。おおもとのツールを動かしてみたら、オプションの関係でうまく動かなかったので、fork していくつかオプションをコメントアウトし、一旦動く状態にしました。

markdownGitHub Wiki にアップロードする

GitHub Wiki は git リポジトリとして clone できるので、

git clone https://github.com/YOUR_USERNAME/YOUR_REPOSITORY.wiki.git

して、markdown ファイルを一通り add し、master(今どきは main?) ブランチへ commit すれば完了です。これで一応読める状態の Wiki が完成します。いくつか画像等がリンク切れする部分が出てきてしまったのですが、一斉置換して手直ししたらなんとかなりました。

Qiita:Team 上の情報の HTML 化

Qiita:Team については、HTML としてアーカイブを残すことになりました。

k-anz/quiita-team: Qiita Team JSON to HTML forked from okaxaki/quiita-team

このツールが作られた当時は、Qiita:Team から Export される JSON ファイルは 1ファイルの巨大な JSON だったようなのですが、2020年12月現在では 3ファイル (articles, groups, projects) に分かれて Export されるようになっていました。

なので、これも fork して 3ファイル分読み込み処理が走るよう修正し、一旦動く状態にしました。

なかなか解約作業をやる機会も少ないとは思いますが、必要がある方は参考にしてみてください。

CircleCI + AWS CDK で cdk deploy したときに表示が崩れたら --progress events のオプションを追加しよう

最近困ったこと

最近、業務では AWS CDK と CircleCI を使って、インフラ関連の CI/CD を回しています。

CircleCI はいろいろと融通がきいて便利なのですが、CircleCI 上で cdk deploy コマンドを動かすと、コンソールの表示が以下の画像のように崩れてしまう、という問題がありました。

f:id:k-anz:20201113152645p:plain

プログレスバーが、一文字ずつ改行して表示されてしまう感じです。少し複雑なスタックを deploy すると、ジョブのアウトプットが 4000 行を超えてしまい、CircleCI の側で警告が表示されることもありました。。

対処法

cdk deploy のオプションに --progress events を追加する

feat(cli): control progress output style with --progress=bar|events by shivlaks · Pull Request #9623 · aws/aws-cdk

上のリンクがオプションの機能追加の Pull Request です。cdk.json に記載をすることで、問題を回避することもできるみたいですね。

余談

cdk.dev の aws-cdk チャンネルを見ていたら、たまたま全く同じことで困っていた人が質問をしていて、おかげで私も対処ができて助かりました。

cdk.dev の Slack はとても活発に質問や意見交換がされているので、入っておいて損はないなと思います。cdk8s や terraform-cdk など新しいプロダクトについての情報もあるので楽しいです〜

参考 URL

湯 work で一日リモートワークをした話

先日、 両国湯屋江戸遊 さんの湯workにて、リモートワークをしてきました。今回はそのレポートです。

湯work とは

もともと浴室・サウナだった場所を改装して作られたコワーキングスペースです。文章で説明するよりも写真を見ていただいたほうがわかりやすいと思うので、まずはいくつか写真をどうぞ。

なお、湯work は男女で階が分かれていて、女湯のあるフロアに女性用の湯work スペースが、男湯のあるフロアに男性用の湯work スペースがあります。以下の写真はすべて女性フロアの様子です。

f:id:k-anz:20200712232822j:plain 入り口を入ったところ。

f:id:k-anz:20200712233429j:plain 最奥にある、もともと浴槽だったところを利用した作業スペース。大きめのビーズクッションがあるのが快適。 机上の茶色い部分はコンセント。

f:id:k-anz:20200712233520j:plain この作業スペースは檜湯(だった)らしい。

f:id:k-anz:20200712233553j:plain 温度計も残されている。

f:id:k-anz:20200712233725j:plain 横を見ると、なるほど浴槽の並んでいる感じが銭湯っぽい。

f:id:k-anz:20200712234155j:plain もとサウナだった場所は、現在は会議スペースに。

様子

湯work スペースには 14時〜20時くらいの間滞在しました。平日かつ女性用フロアだからというのもあってか、一日を通して人は少なく、一番人の多いタイミングでも、滞在していた人数は 5人くらいでした。

19時近くなるとさすがに人が誰もいなくなったので、上の館内写真はそのときに撮影しました。

作業環境としては、各作業スペースにそれぞれ電源がある他、Wi-Fi も完備されていました。あとはホワイトボードを使用できるスペースもありました。

良かったこと

平日にゆったり働く場所を確保しつつ、そのあと深めにリフレッシュできる

  • 電源・Wi-Fi 完備で、広い空間でリラックスして作業ができる
  • 仕事を終わらせた直後に、大きなお風呂やサウナ、岩盤浴でリフレッシュできる

この2点の両立は 湯work ならではだと思います。特にデスクワークの直後に、岩盤浴で背中や腰を温められるというのは最高です(語彙力)。

また、リニューアルしたてということもあって、お風呂はとても綺麗で清潔感があります。浴場にサウナと水風呂、ゆったりめの休憩スペースもあるので、いま流行(?)の、サウナと水風呂の交互浴からの「整い」もばっちり得られそうです。

湯work したあとにしっかりリフレッシュをすると、一日仕事をしたあとなのに、なんだか休日明けのような気分のよさを味わえるはずです。

留意しておくべきこと

それなりにお金がかかる…

私はお昼過ぎから閉館近くまで滞在していたのですが、

  • 入館料 (通常料金が税込 2,750円)
  • 夕食
  • 飲み物(水160円、お茶やジュースは190円という相場感)

などで、結局 5000 円近くお金を使いました。コワーキングスペース+スーパー銭湯 と考えれば、まあまあ妥当なラインなのかもしれないですが、個人的には安くはないな、という印象を持ちました。

ちょっと寒い

「湯work に行くなら靴下を持っていくべき」というのを、先に湯work を体験していた職場の先輩から言われていたのですが、実際に行ってみてその理由がわかりました。このスペースは結構底冷えがします……!

とくにいまはコロナウイルスの関係でブランケットの貸し出しも停止しているので、冷房に弱い方は薄手の羽織物を持っていくと安心そうです。

機会があれば、皆さんもぜひ行ってみてください!

Flutter + GitHub Actions で flutter analyze に失敗したときの対処法

エラー内容

GitHub Actions 上で flutter analyze コマンドを実行すると、以下のようなエラーが発生し、 action の実行に失敗してしまう(exit code 1)。

Analyzing xxxxx...                                          

  error • The named parameter 'visualDensity' isn't defined • lib/main.dart:14:9 • undefined_named_parameter
  error • Undefined name 'VisualDensity' • lib/main.dart:14:24 • undefined_identifier

ローカル環境では flutter analyze してもエラーは発生しない。

結論

subosito/flutter-action の channel を beta にしたら解決した。エラー発生時、ここは stable にしていました。

      - uses: subosito/flutter-action@v1
        with:
          channel: 'beta' # これが正解

2020/5/1 追記

少し原因など調べたので追記しておきます。

原因

ローカル環境と、 subosito/flutter-action の channel が一致していませんでした。(そりゃエラーにもなるよな、というところ……とほほ)

ローカル環境の flutter channel の確認は flutter channel コマンドでおこないます。

% flutter channel
Flutter channels:
* beta
  dev
  master
  stable

ちょっと記憶にないのですが、私は channel を beta に 設定していたようです。なので、GitHub Actions の設定も beta にしておかないとエラーとなってしまうのですね。

原因がわかったところで、正しい対処

私の場合、beta の機能をガンガン攻めて使っていきたいというわけでもないので、ローカル環境、GitHub Actions の設定ともに stable channel に合わせておくのが良さそうです。

ということで、ローカルと GitHub Actions の設定を stable channel を向ける作業をしていきます。

channel の切り替え

% flutter channel stable 

upgrade

% flutter upgrade

静的解析

% flutter analyze

先述の visualDensity の部分など、いくつかソースコード中でエラーが出たので、それを適切な形に編集しました。

subosito/flutter-action のバージョン設定の書き換え

      - uses: subosito/flutter-action@v1
        with:
          channel: 'stable' # ここを変更

これで、ローカル環境、GitHub Actions の設定ともに stable channel を向いた状態で正しく動くようになりました。お粗末さまでした。

参考

Flutter 現在のchannelの確認方法と切替え方法、おまけにupgradeの方法 | ふらっと考える

2019-2020 シーズン振り返り

先日の投稿の通り、最近すっかりスキーにハマっています。少雪の上コロナウイルスの影響もあり、もしかしたらもう今シーズンはスキーには行けないかな……と思うので、ここらでシーズンのまとめを書いておこうと思います。

2019-2020 シーズン

  • 12/28 ガーラ湯沢スキー場
    • 12/24くらいまでガーラがOPENしていなかったので心配したが、ちょうど行った日にたくさん雪が降ったのでよかった
  • 12/29-30 Hakuba 47
    • 例年に比べて雪があまりにも少なかったので驚いた
  • 1/24 丸沼高原スキー場
    • ゴンドラコースからのロングランが楽しかった
    • 晴れたり曇ったり雪が降ったりしたが、基本的に穏やかな気候のなか過ごせた
  • 1/30 かぐらスキー場
    • メインゲレンデより上は、それなりに快適に滑れた記憶
    • 下のほうは思い切り雨だった
  • 2/23 宝台樹スキー場
    • 混雑が激しかった上、強風で山頂リフトが止まったのでなにも楽しくなかった
    • アーバスで行ったら、渋滞が激しすぎて到着が遅れ、3時間くらいしか滑れなかった
  • 2/29-2/30 白馬五竜 & Hakuba 47
    • 中間部から上はほどよく雪が柔らかく滑りやすかった
    • いいもり方面は少雪で泥混じりの雪……
  • 3/14 かぐらスキー場
    • 鬼のように混んでいて驚いた(私も人のことは言えないが、自粛とはなんだったのか……)
    • メインゲレンデより上はすっかりアイスバーンになってしまい滑りにくかった
    • ロープウェイ登ってすぐのあたりが、雪がほどよく緩んでいてちょうど良かった
  • 3/20-21 Mt.乗鞍スノーリゾート(3/21はBCツアー参加)
    • こじんまりとしていて人も少なく、いい意味でかぐらとのギャップを感じた
    • 3/20 はハイシーズンかと思うくらい雪が降った
    • 3/21 は風はあるものの晴天で、初心者のBCにはよい日だった

滑走日数 11日


じつは昨シーズンも同じようにまとめを書こうとして、結局投稿しそびれていたので、ついでにこちらに書いておきます。

2018-2019 シーズン

  • 12/23〜24 斑尾高原スキー場
  • 12/29〜31 Hakuba 47
  • 1/13 岩原スキー場
  • 1/21 スノーパーク尾瀬戸倉
  • 2/9〜11 苗場スキー場、かぐら・みつまたスキー場
  • 2/16〜17 戸狩スキー場
  • 3/16 神立高原スキー場

滑走日数 13日

バックカントリー用の道具を揃えました

バックカントリー用の道具を揃えました

ここ5年ほど、スキーをしに毎シーズン群馬や新潟長野あたりのゲレンデに遊びに行っていたのですが、最近、山をスキーハイクアップしたり、手つかずの山を滑ったりしたりすることにも興味が出てきました。

そこでこの春、バックカントリー用の道具を揃えました!今回はその道具の紹介記事です。

ゲレンデスキーヤーバックカントリーを始めるにあたって買ったもの

私は結局、以下の用具をひと揃い購入しました。トータルで15万以上になりました。。

以下、それぞれの道具について細かく紹介していきます。


板 : ATOMIC - BENT CHETLER 100 (length 172cm)

センター幅がありパウダーに対応しやすく、また、軽いためこちらにしました。

あとは、訳あり品(ビンディング穴あけ後に購入キャンセルされてしまった品)が店頭に出ていてお買い得だったんですよね。穴を埋めたあとがあるのはちょっと残念ですが、デザインもかっこいいので気に入っています。

ビンディング : G3 - ION 12

ゲレンデ用のアルペンスキーを所持している人がバックカントリーを始める場合、たぶんビンディングの選択が一番難しいと思います。

ビンディングを選ぶとき、必ずと言っていいほど出て来るキーワードが「登り重視か、滑り重視か」というものです。だいたい、スキーでの山登りをしたことがない状態で、「登りか、滑りか」と言われても答えるのが難しいわけですが。。。

私の選んだテックビンディングと呼ばれるビンディングは、その点で言えば「登り重視」の作りで、

というような特徴です。

個人的な意見ですが、行動範囲を広げていい雪を楽しく滑るためには登りの体力がそれなりに必要になるので、払えるお金と胆力があるのなら、「登り重視」の装備を選ぶのは悪くない選択だと思っています。

でもまあ、結局は、詳しい人によく話を聞いて選ぶのが良いのかな、という感触です。私もいろいろと調べたものの、どうしたものかよくわからず、最後は店員さんに説明してもらってやっと決めることができました。

サイトだとこのあたりがわかりやすかったです。ビンディングの種類

ブーツ : TECHNICA - ZERO G TOUR PRO

3着ほど試着させてもらい、軽く、前側の可動域が広めで、歩きやすそうだったためこちらにしました。

ブーツに関しても「登り重視か、滑り重視か」が問われます。私はせっかく軽いビンディングを選んだのを無駄にしたくなかったので、ブーツもなるだけ軽め(ただし剛性もそれなりにあり、滑りの安定感も見込めそう)なもので選びました。

余談 : 重量について

ここまでさんざん「重さ」の話をしてきたので、具体的に、私がゲレンデで使っている道具と、バックカントリー用に揃えた道具にどれだけ重さの違いがあるか調べてみました。板は大きさがかなり違うのでひとまず除外して、ブーツとビンディングで比べてみます。

サイトでの公表値と自宅での実測値が入り混じっているのであくまで目安ですが、重量差は片足でおおよそ 1.7kg でした。こうして見ると、「登り重視」は「軽さ重視」とニアリーイコールなのかなという気がします。重い道具を使うほど、登りでの体力の消耗は激しくなるので。

ライミングスキン : Black Diamonds - Ascension Nylon STS

店員さんの「クライミングスキンを使うのは初めて?ならこれ。とにかく登りやすいから。」の言葉を信じてこれにしました。

出すときしまうときの扱いやすさを売りにしている商品もありますが、登りの時間は一日のうち3時間以上を占めるのに対して、シールの出し入れは一日数回なので、「登り」の性能ってとっても大事だと感じます。(ほかのシールを使ったことがないので、偉そうなことは言えないですが……!)

スキークランポン : G3 ION スキークランポン

スキークランポンビンディングとの相性があるので、ビンディングを決めると、必然的にクランポンをどれにするかが決まってくるのかなと思います。

初心者のうちは、クランポンが必要なほどきつい斜面に行くことはそれほどないと思うので、最初は買わないでいても問題ないかもしれません。購入したものの、私も最初のツアーではクランポンは使用しませんでした。


以上、私の道具の紹介でした! なにか買い足すようなことがあればまた書こうと思います。

Java のプログラミングでつまづいたこと(初学者のとき)

satoru-takeuchi.hatenablog.com mizchi.hatenablog.com

このあたりを読んで自分も書いてみようと思った、ので書きます。これらの記事がバズってからずいぶん経ってしまったけれど……。けっこうな文量になりそうだったので、まずは Java の初学者のときにつまづいたことを書こうと思います。

whoami

2014 年に大学を卒業し、そこからソフトウェア開発業に携わって 6年目になります。小中高とプログラミング経験はなく、大学は文系学部卒だったので、初めてプログラミングを本格的に学んだのは、新卒で入る会社の入社前研修のときです。

プログラミング学びはじめの頃は、Oracle を中心とした SQL・データベースの学習、 Java の学習。その後、OJT によるプロジェクト参画 (Spring Framework などを使用)をしていました。

初学者のころにつまづいたこと

とにかく用語がわからない

インスタンス」「プロセス」など、当時はどれもあまり聞いたことのない言葉。最初はまったくイメージが湧かず、調べてもなかなかしっくり来ませんでした。いまとなってはもうすっかりお馴染みなんですけどね。

なんとか検索して調べて、卑近な例でたとえを挙げてくれているようなサイトを見つけて、イメージを掴んでいきました。たとえば以下のようなサイトですね。

Oracle Database | 技術ブログ| レック・テクノロジー・コンサルティング株式会社

いま見ると、正直「なんじゃこりゃ」という感じなのですが、右も左もわからない当時の自分は、ノートやペンのたとえに大変助けられました。

自分の学習していることが何に役立つかイメージできない

Java を学びたてのころ、簡単な条件分岐や標準入出力の仕方などを習って、コンソール上で動くプログラムを書いていたのですが、黒地の画面に白の文字で「Hello World」などと表示されることにどれだけの意味があり、この先の仕事の何に結びついて、どう役立つのか、がなかなかイメージできませんでした。

なんとなくですが、こういう思いをしている初学者の人って多いんじゃないでしょうか。

いま思えば、実際に現場で仕事をしている先輩に、「この勉強が現場でどう役立つんですか?」と質問してみたら良かったのかもしれません。もし、いまの私が当時の自分に教えるなら、「サーバやデータベースがどのように関わって、日頃自分たちの使っているサイトが表示されているか」というようなところを説明して、その中で Java (サーバ側プログラム) のやっていることを教えるかな、と思います。

「クラスの継承」や「インターフェースの実装」がまるきり理解できない

これは衝撃すぎて忘れもしないのですが、当時使っていた参考書には class Car class SuperCar extends Car という例が出ていました。正直、まったく意味がわかりません。「スーパーカー」が「車」を「継承」??? 「継承」というのはどういう意味だろうか。技術の継承、などならわかるけれど、「車の継承」とは。

どうにもわからないので、他の参考文献をあたってみると、今度は「いるかクラス」「いぬクラス」「哺乳類インターフェース」などと書いてある。「いるかといぬが哺乳類なのは知っているけれど、それのいったい何がプログラムに関係あるの???」という感じ。

いま思うと、処理に関係するようなたとえが出てこなかったせいで、理解がなかなか進まなかったのだと思います。ソフトウェア開発歴 6年になっても「哺乳類インターフェース」なんて作ったことないもん。

その後、研修の補講で「Java でポーカーのゲームを作る」という課題があり、先輩エンジニアが良いお手本のソースコードを見せてくれたおかげで、「なるほどこういう意義があるのか!」という気づきを得ました。

実際のところ題材は何でも良かったのですが、プログラミングにどう活きるか、を誰か早く教えてくれたら良かったのに、といまも思います。

どうやって克服したか

仲間の存在が大きかった

私の場合、会社の新人研修でプログラミングを学んでいたので、同じくらいの学習レベルから学習を進めた同期の存在 (だいたい 20人くらい居た) 、また、そんな私たちに親身になって教えてくれた研修講師や先輩の存在が、何より大きかったと思います。

「戻り値と引数ってどっちがどっち?」「オブジェクトとかマジで意味わかんねー」「研修ダルいわ〜」など (?!) 、わからないことを「わからない」と素直に言い、教えてもらえる環境があったことで、しっかりと地力を育むことができたと感じています。

会社以外でも、 Twitter のフォロワーの方にはかなりお世話になっていました。 Oracle Master Bronze 11g の勉強で苦しんでいたときには、 Platinium 資格持ちのフォロワーさんが教えてくれたこともありました (恐れ多い) 。私自身エンジニアとしての実力ははまだまだなのですが、いろいろな方に助けていただいてここまで来たのだな〜という感じがします。


そんなところです。なにか学びはじめの人の励みになればと思います。

また気が向いたら、最近学んでいる TypeScript 編を書きます(また学びはじめて数ヶ月ですが、これもなんだかんだで書くことがたくさんある)。