2023年12月31日 word cloud で 2023 年のブログを振り返る 2022年12月31日 word cloud で 2022 年のブログを振り返る こんにちは、 @kz_morita です。 2022年も年の瀬になりました。 今年も一年間週一でブログを書き続けることができ、この記事を入れて合計で52記事を書くことができました。 そこそこ書けたので毎年恒例の word cloud で振り返ってみます。 word cloud 手法は過去の記事と同様です。 word cloud で今年のブログを振り返る 今年は以下のような結果になりました。 今年は、Scala が多かったように思います。また Windows PC を購入していろいろな環境構築をしたので、インストール などの単語も含まれていそうです。 今年書いた scala タグ がついている記事は以下のとおりです。 Scala の並列コレクションで処理を高速化する scala-uri で角括弧を含む文字列が Parse Failed する件の調査ログ scala-redis を使ってみる Scala で Duck Typing を使ってコードを共通化する Scala の 型パラメータによる抽象化 Scala で shapeless を使ってみる Scala で List から Mapに変換する Scala で既存の型を拡張する WSL 上にScala の環境を構築する Scala の Regex で全角半角を無視して match する方法 Scala で case class をソートする Scala から Parameter Store のデータにアクセスする Scala で Retry 処理を実装する Mockito でメソッドの呼び出し回数のテストをする 14記事書いていたみたいです。 去年は入門記事だったのに対し、今年は実際に開発してみて躓いたところやライブラリについてなどより一歩深いところの記事がかけたんじゃないかなと思います。 2022年4月10日 WSL2 上にブログ執筆環境を構築する こんにちは、 @kz_morita です。 今回は、WSL2 (Ubuntu) 上にブログ執筆環境を構築したのでその作業メモを残します。 やることリスト wsl setup Windows Terminal をインストール GitHub まわりの設定 neovim のインストール hugo のインストール node.js のインストール それぞれメモを残していきます。 wsl setup wsl の setup は簡単で、PowerShell で以下のコマンドを入力するだけです。 $ wsl --install デフォルトで Ubuntu がインストールされます。オプションでどのディストリビューションで作成するかも選択できます。 詳しくは以下を見るとよさそうです。 https://docs.microsoft.com/ja-jp/windows/wsl/install install 後は、User の作成などを実施しました。 デフォルトでは、root ユーザーでログインしていたので以下のコマンドでユーザーを作成しました。 (kz_morita となっているところは適宜ユーザー名に読み替えてください) $ adduser kz_morita $ gpasswd -a kz_morita sudo これでユーザーは作成できたので、デフォルトユーザーに設定します。 PowerShell で以下を実行します。 $ ubuntu config --default-user kz_morita Windows Terminal をインストール Windows で使用するターミナルですが、Windows Terminal というものがよさそうだったのでこちらをインストールしました。 https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701?rtc=1&activetab=pivot:overviewtab GitHub まわりの設定 こちらは、主に ssh鍵ペアを作って GitHub 上に登録します。 2021年12月28日 word cloud で 2021 年のブログを振り返る こんにちは、 @kz_morita です。 今年も無事週一でブログを書き続けることができたので、今年のブログの内容を word cloud で振り返ってみます。 今年は、どうやら 52 本の記事を書いていたようです。 word cloud で振り返る 手法は、去年と同じなので、よかったら参考にしてみてください。 word cloud で今年のブログを振り返る 早速 wordcloud の結果を見てみます。 目立つのは、データ, scala, lambda, 関数 あたりでしょうか。 データ関連で言うと、以下のような記事を書きました。 Redshift 分析のための Window 関数まとめ Google Colaboratory で Google Drive 上のファイルを読み込む さまざまなデータベースの分類について データベースのデータレイアウトについて Apache Lucene の Index の仕組みを探る scala 関連は開発環境の構築と入門記事を書きました。 Java を jenv を使って環境構築する Scala と IntelliJ で開発環境のセットアップ M1 Mac に sbt を入れて Scala 3 の REPL を使用する Scala入門 その1 基本型とリテラル Scala 入門 その2 制御構文 Scala入門 その3 クラスとオブジェクト Scala入門 その4 トレイト Scala入門 その5 関数とクロージャ Scala入門 その6 コレクション操作 Scala入門 その7 テスト lambda はおそらく AWS 関連の話だと思います。AWS関連は以下のような記事を書きました。 2021年7月23日 ブログをAWS の CodePipeline でデプロイする こんにちは、 @kz_morita です。 このブログは S3 + CloudFront の環境に移行してからはローカルで deploy スクリプトを叩く方式をとっていました。 今回 AWS の CodePipeline を用いてデプロイのフローを構築したので手順などをまとめます。 最終的な成果物 最終的には、以下のようなパイプラインを作成しました。 GitHub からソースコードを取得 ソースコードをビルド コードを S3 にデプロイ CloudFront の Cache を Invalidate CodePipeline とは AWS の CodePipeline はパイプラインを作成しソースコードの変更があったときに、ビルドしたりテストしたりデプロイしたりといったフェーズを定義でき、そのフローを自動化することができる AWS のマネージドサービスになります。 このブログでも採用していますが、GitHub の master ブランチにマージ (push) された時に自動でソースコードを取得、ビルド、デプロイをするといったパイプラインが比較的簡単に作成できるのでとても便利です。 具体的な説明は公式サイトを確認してみてください。 https://aws.amazon.com/jp/codepipeline/ Pipeline を CDK で構築する 今回は デプロイのフローを AWS 上に構築するために aws-cdk を用いました。 cdk は、AWS の各種リソースを ソースコードで記述することができるものです。 TypeScript などで記載できバージョン管理なども行えます。(IaC: Infrastructure as Code というやつです) 今回は cdk 自体の解説は行わず、すでに環境が整っている前提とさせてください。 2021年4月18日 ブログをさくらVPSからS3+CloudFrontに移行した こんにちは、 @kz_morita です。 今回は,さくらVPSでホスティングしていたこのブログを S3 + CloudFront でホスティングするように移行したのでやったことをメモしておきます. やったこと S3 にバケットを作成 CloudFront でキャッシュ設定 CloudFront で エラーの 404 を返すように設定 Lambda@Edge でDefault Rootの設定 ACMでSSL証明書を作成し,CloudFront に設定 お名前.com で cloudfront の URL を設定 S3 にバケットを作成 ブログ用の backet を作成しました.後の工程で CloudFront 以外からのアクセスは許可しない設定にしますがここではパブリック・アクセスをすべて許可する設定にします. バケットを作成したら ローカルで hugo でビルドして後デプロイして動作確認をします. # build $ hugo # deploy $ s3 sync --delete ./public s3://BUCKET_NAME 以下のようなURLにアクセスしてページが表示されることを確認します. https://s3-ap-northeast-1.amazonaws.com/BUCKET_NAME/index.html CloudFront でキャッシュ設定 S3 にデプロイが確認できたら,CloudFrontの設定をします. 基本的には以下の記事の CloudFront で公開 のセクションのとおりに行いました. https://dev.classmethod.jp/articles/cloudfront-s3-customdomain/ ※この段階では独自ドメインの章はやってません. また,前述しましたが,S3を公開設定にしているので CloudFront 側でS3のバケットへのアクセスを制限するために以下のように Restrict Bucket Access を Yes に設定をします. 2020年12月22日 word cloud で 2020 年のブログを振り返る この記事は、 write-blog-every-week Advent Calendar 2020 の 22 日目の記事です。 こんにちは、 @kz_morita です。 年末になり、今年を振り返るモードになっていますが、今年もなんとか週一でのブログ更新を続けることができました。 週一で書き始めたのが、2018年8月31日の この記事 からなので、2年3ヶ月 ほど続いたことになります。 こんなに続いたのは、完全に write-blog-every-week のおかげです。今年もありがとうございました。 write-blog-every-week については、こちら Write Blog Every Week 勢いで週一ブログ書くslackグループを作った write-blog-every-week について word cloud で振り返る 昨年の記事 でもやりましたが、今年のブログを word cloud で振り返ってみます。 手法は、去年と同じなので、よかったら参考にしてみてください。 word cloud で今年のブログを振り返る どうやら、Rust についてが多かったようです。 確かに、rust タグの記事をみてみると今年で、7 件書いていたようです。 rust タグ あとは、情報検索とネットワーク周りもおさらいしていたので、検索 や、通信 のようなワードも大きいですね。 可視化してみると面白いです。 来年に向けて 今年も振り返るとたくさんブログを書いたなぁと思います。 前半は仕事で忙しかったですが、終盤で自分がずっとやりたかった検索周りの話や、Rust について記事をかけていたのはよかったかなぁと思います。 来年も、自分が学びたいことを中心にブログを書き続けていきたいですね。 来年のブログ振り返りで、面白い wordcloud が見れるように頑張ります。 2020年12月2日 2020年の開発振り返り こんにちは、 @kz_morita です。 2020年も気がつけばのこりあとわずか.ということで今年触った技術とかやったことについて振り返ってみます. 記憶と Tweet をたよりに思い出せる限り書いていこうと思います. 1月 ~ 3月 大まかに,アセンブリとかRust に入門したりしてました. 業務では,Kotlin とか gradle 周りがメインだったようです. アセンブリに触れてみる この月は,「プログラムはなぜ動くのか?」という本を読んでいました. プログラムはなぜ動くのか?を読んだ そこから派生して,アセンブリ言語についていろいろと調べてました. その結果として,簡単な C言語のプログラムからアセンブリされたコードを眺めるということをしてました. アセンブリコードを眺めてみる HHKB Hibrid Type-S 原価バーいって触ってきたりしてました.結局買ってません. 原価バーいってHHKB Hibrid Type-S 触って来たけど、良かった! 静音化した HHKB BTと打感そんなに変わらなかったから購入はないかな。 pic.twitter.com/GVXXqBhp8F — kz_morita 𓆏 (@kz_morita) January 13, 2020 Rust 入門 やっていき pic.twitter.com/PpjYIr6KE5 — kz_morita 𓆏 (@kz_morita) January 29, 2020 所有権とか,ライフタイムとかと戦っていました. Rustの所有権について Rustのライフタイムについて あとは,actix-web とかフレームワークをさわったりしてました. Rustのactix-web を触ってみる 業務 業務では,新規プロジェクトが始まって,Kotlin の開発環境とか,gradle とかと戦っていました. 新しいプロジェクトが,Front が,React + TypeScript で,サーバーサイドが Kotlin という構成だったのでそのあたりのキャッチアップが多かったです. 2019年12月31日 2019年のふりかえり こんにちは、 @kz_morita です。 2019 年ももう少しで終わってしまうので、今年やったことなどを振り返って見ます。 ハイライト 自分にとって 2018 年が色々と変化の年でした。2018 年に転職をしたし、ブログを週一で書き始めたのも、2018 年の 8/31 からです。 以下の記事がきっかけとなります。 週一ブログチャレンジ宣言 2019 年はそれらを根気よく継続できた年だったかなと思います。 仕事 仕事でやっていたことについてまとめます。結構いろいろなことをやらせてもらったのには非常に感謝してます。 iOS 開発 本格的に iOS 開発を始めました。Auto Layout にすごく苦戦した気がしましたが、まぁある程度のものなら作れるくらいにはなれたかなと思います。アプリひとつを任せてもらえるくらいにはちゃんと iOS を実装できるようになれたのはよかったかなと思います。 来年はテストとか、Rx とかちゃんと導入していきたいなと思います。 HLS と暗号化について HLS 動画を暗号化するという要件の技術的な調査から、実際にどうやって運用していくかまでをやりました。 ストリーミング再生について結構詳しく慣れたのでよかったかなと思います。ちなみに、技術書典も HLS と iOS というテーマで書いたりしました。 Nuxt.js と Web フロント 新しい Web メディアを立ち上げるのに、Nuxt.js / Vue.js / Stylus / Pug という技術を用いました。最近流行のフロント技術がさわれたのがよかったです。あとは、Contentful というヘッドレス CMS をつかったりもできたのでよかったです。 ひさしぶりのサーバーサイド そして最後の方は、3, 4 年ぶりにサーバーサイドをやってました。Server Side Kotlin で実装しましたが、JVM 系言語の経験がなく結構苦労をしました。OR マッピング に JPA を用いたのですが、使い方に慣れるのに結構時間がかかりました。ただし、Kotlin 自体はすごく書きやすい言語だなぁと思いました。 Coroutine も慣れるとかなり直感的に描けるように感じました。また、サーバーサイドは DDD のようなレイヤー構造を採用していて、どのようにドメインモデリングするかなどはとても勉強になりました。知識として持っていたものを実装に落とす良い機会でした。 2019年12月28日 word cloud で今年のブログを振り返る こんにちは、 @kz_morita です。 12/23 日に行われた、「エンジニアの成長を応援する忘年 LT 大会 2019」 というイベントに参加させていただき、そこで「ブログを書き続けた話」というタイトルで 2019 年のブログの執筆を振り返る LT を行いました。 そのなかで以下のような、Word Cloud を用いてブログの内容を可視化してみたところ面白かったので、今日はその Word Cloud について書いていきます。 Word Cloud とは? Word Cloud は上記の画像のように、単語の出現頻度を可視化するテキストマイニングの手法です。テキストマイニングといったら難しそうですが、ライブラリが用意されていて非常に簡単につくることができます。 ライブラリはこちら。 https://github.com/amueller/word_cloud 全体のながれ 作成の流れとしては以下のようになります。 可視化したい文章の準備 前処理 (不要文字の削除, Stop Word) 実行 説明の都合で上記順番で説明していますが、実際には、文章を準備 → 前処理 → 実行 → 前処理 → … となんども前処理を調整しました。 それでは順を追って説明していきます。 可視化したい文章の準備 今回は 2019 年に書いた記事を抽出したかったので、以下のようにコマンドでテキストファイルにしました。 $ grep 2019 -rl ./content/posts/ | xargs cat > blog.txt grep コマンドの “-l” オプションでパターンを含むファイル名だけを標準出力できるので、それを cat で ファイルの内容を標準出力に書いたのを、blog. 2019年12月15日 ブログ執筆とブログ開発のススメ このブログは、 write-blog-every-week Advent Calendar 2019 の 15 日目の記事です。 昨日は、 @budougumi0617 さんで、 2019 年振り返り(GitHub 編) でした。 こんにちは、 @kz_morita です。\ このブログは、Hugo を使って構築しているのですがデザインや HTML を組むところから自分で実装しています。いわば、ブログの開発をしながら執筆も行っているような形です。 開発と執筆を同時にやることはいろいろ大変なことも多いのですが、いろんなメリットがあったので今日はそのことについて書いていきます。 メリット 一年間運用してきて以下のようなメリットを感じました。 サービス運用に関する知見がたまる ブログを好きにできる 執筆した記事をもっと読んでほしいから開発をする ブログ開発自体がさらにブログネタになる ひとつずつ説明していきます。 サービスを運用する知見がたまる このブログは Hugo で Markdown から HTML を生成して、生成された HTML をさくら VPS 上の Web サーバーにホスティングすることで運用しています。 また、HTML などのコーディング自体も自分で行いました。その過程でかなりたくさんのことを学ぶことができました。簡単に列挙してみます。 VPS の Linux まわりのいろいろ iptables などのサーバーの設定 apache で Web サーバーを立てる (nginx にしたい) お名前.com でドメインを取る Let’s Encrypt での HTTPS/TLS 対応 Jenkins でデプロイをする Github Actions をつかってデプロイする HTML, CSS、SASS, JS の基礎知識 CSS アニメーション Hugo の使い方とすこしだけ Golang SNS シェアの方法 マテリアルデザインについて 色彩やコントラストについて ロゴの作り方 Markdown の知識 Mathjax や、mermaid. 2019年12月1日 Hugoで関連する記事を表示する こんにちは、@kz_moritaです。 ブログを1年近く続けてきて、おかげさまで月間の PV が 2000 くらいになるまで皆さんに読んでいただけるまでになりました。 Google Analytics をみていると、直帰率 87.26%となかなか高かったのでここを改善するために、ブログ記事に関連する記事を表示してみました。 GAの画面。ページ滞在時間とかなかなか良さそう? 結論からいうと Hugo で非常に簡単に追加することができましたので、Hugo を使ってる方はぜひ入れてみてください。 なお今回の Hugo のバージョンは以下になります。 $ hugo version Hugo Static Site Generator v0.59.1/extended darwin/amd64 BuildDate: unknown 関連記事の追加 今回は記事ページに関連記事を追加するので、layouts/_default/single.html に追記します。 自分のサイトの例を下記に載せます。 layouts/_default/single.html {{ $related := .Site.RegularPages.Related . }} {{ with $related }} <div class="container l-related-articles"> <h2 class="l-list-title">関連記事</h2> <ul class="l-box-wrap container col3"> {{ range . }} <li class="l-box">{{ partial "_list-item.html" . }}</li> {{ end }} </ul> </div> {{ end }} 重要な部分は以下の部分です。 2019年9月1日 週一でブログを書き続けて1年間がたったので振り返る こんにちは、 @kz_morita です。 このブログの更新ですが、週一で更新をし続けて今日で丸1年間が経ちました。記事数でいうとこの記事を合わせて 50記事になりました。 あっという間でしたが1年続けられたことに自分でもかなり驚いてます。 三日坊主の自分がここまで続けられたのは、write-blog-every-week Slack とその中の皆様のおかげです。ありがとうございます。 さて、今回は特に技術的なネタではないのですが、このブログを週一で更新するという習慣がちょうど1年間経って未だ継続できているのでそのことについて振り返ってみます。 週一ブログ宣言 週一でブログを書き始めたきっかけが以下のブログです。 週一ブログチャレンジ宣言 上記のブログにも記載してある通り、Output量を増やしたいというのとOutput駆動で深いInputを増やしたいということが週一でブログを書こうとしたことの目的でした。 1年間続けてみてどうだったか? 1年間続けることができましたが、どんな感じだったのか簡単に振り返ります。 よかったこと 文章を書く習慣がついた 文章力には自信がないのですが、1年間書き続けたことで多少なりとも文章を書くことに対しての抵抗感などがなくなったと感じています。 その結果かどうかはわかりませんが、技術書典7において会社の人と合同で本を出すことになりました。 この一歩が踏み出せたのは、日頃のブログを書く習慣のおかげかなぁと思っています。 思考が整理できた 知識として身につけているつもりでも、いざブログを書こうとするとかけなかったりすることがとても多かったです。 自分の知識を筋道をつけてちゃんとブログとして書くということを通して、思考を整理できたのではないかなーと思っています。 自分が学んだことのログがわかる 去年1年間でどのようなことを学んだのかが大まかに記録として残っているのが良いなぁと思っています。 例えば、去年は統計学を勉強していてそのことについて結構書いていたり、Elm のアドベントカレンダーに投稿していたり、どんなことをやっていたかがわかるのは後から振り返るのにとても良いと思いました。 改善できること すでに知っていることを書くことが多かった 週一での記事公開を成し遂げるために、今知ってる知識をどうにかやりくりして記事にして公開するということが多かったです。 本来の目的の Output駆動でInputする を考えるとあまり目的に向かった行動ではなかったのかなと思っています。 週末まで書かないケースが多い ほとんどの週が週末のギリギリのタイミングで公開していました。(この記事もギリギリのタイミングになって慌てて書いてますが……) もう少し余裕を持って書きたいです。 これからの1年間 これからももちろん続けていきたいわけなのですが、以下の点に意識して頑張りたいと思います。 できるだけ週の早い段階で公開するように心がける Output 駆動で Input ができるように記事の内容を選択する 記事の質にもこだわる (KPIはPV数とかはてブ数とか) とはいえ、これからも継続的に続けることが最低ラインだと思っていますので、それをしっかりこなしつつ質をあげたり新しいことを学んだりできるように頑張っていきます。 2019年6月2日 図形の描画にmermaidを導入した こんにちは、kz_moritaです。\ ブログに図形を描画する機能を実装したいなぁと思ったので、色々調べた結果 mermaid というツールが良さそうだったので Hugoに導入してみました。 以下のような図形が割と簡単にかけるので非常におすすめです。 graph LR; A--B; 公式サイト https://mermaidjs.github.io Hugoを使っていて、図形を描画してみたいといった方は参考にしていただけるかと思います。 npmでインストール、そしてshortcode作成 インストールは以下のコマンドでサクッと行いました。 $ npm i mermaid 自分はwebpackとbabelでjsをビルドしているので、導入にあたっては以下のサイトを参考にしました。 https://github.com/mermaidjs/mermaid-webpack-demo そして、entry.jsに以下のように mermaidの初期化の処理を書きます。 import mermaid from "mermaid" mermaid.initialize({startOnLoad:true}) 以上で導入は終わりです。サクッと簡単ですね! そして、Hugoで簡単に図形を書くために以下のようなshortcodeを作成しました。 mermaid.html <div class="diagrams"> <div class="mermaid" align="{{ if .Get "align" }}{{ .Get "align" }}{{ else }}center{{ end }}" >{{ safeHTML .Inner }}</div> </div> 冒頭で紹介したグラフであれば、以下のように記述することができます。 {{< mermaid >}} graph LR; A-->B; {{< /mermaid >}} 様々な図形がかける 結構色々な図形がかけるみたいなので、いくつか抜粋して紹介します。 フローチャート {{< mermaid >}} graph TD; 処理A-->処理B; 処理B-->if{分岐}; if-->処理C; if-->処理D; 処理C-->処理E; 処理D-->処理E; {{< /mermaid >}} graph TD; 処理A--処理B; 処理B--if{分岐}; if--処理C; if--処理D; 処理C--処理E; 処理D--処理E; シーケンス図 {{< mermaid >}} sequenceDiagram participant クラスA participant クラスB クラスA->>クラスC: call() loop Loop クラスC->クラスC: call self end Note right of クラスC: ノートも<br/>書けるみたい クラスC->>クラスA: method1() クラスC->>クラスB: method2() クラスB-->>クラスC: callback {{< /mermaid >}} sequenceDiagram participant クラスA participant クラスB クラスA-クラスC: call() loop Loop クラスC-クラスC: call self end Note right of クラスC: ノートも書けるみたい クラスC-クラスA: method1() クラスC-クラスB: method2() クラスB--クラスC: callback クラス図 {{< mermaid >}} classDiagram 動物 <|-- 犬 動物 <|-- 猫 車 *-- タイヤ 人 o-- カバン {{< /mermaid >}} classDiagram 動物 まとめ mermaidを導入して割と簡単に図形をブログに描画することができました。 シーケンス図と、クラス図の上下の余白とかちょっと気になりますが一旦よしとします。 2018年8月31日 週一ブログチャレンジ宣言 自分を追い込んで行くために宣言します。 週一ブログチャレンジ宣言とは 週一でブログを更新するという強制的なOutputの習慣をつくり、InputとOutputのサイクルを回し、より深い知識を得ようとする試みのことです。 モチベーション 私はエンジニアとして働かせてもらっていますが、周囲の優秀なエンジニアと自分を比較して劣等感に苛まれることが多々あります。 そこで優秀だと思うエンジニアと自分の決定的な違いは何なのか?また、どんなとき優秀だなぁと思うのか? という疑問が生まれてきました。 まず、圧倒的に自分にはOutputの量が足りないなぁということ。そして優秀だと感じる瞬間は (当たり前ではありますが) Outputした瞬間であることであると考えました。 まずはOutputの習慣を作ること。そして、Output駆動でより多く深いInputを得ることを目的として週一でブログを更新していこうと思い至りました。 ルール 自分の中で以下のルールを定めました。 ブログを毎週1記事以上書いて公開する 書いたブログはTwitter等でシェアする 締め切りは毎週日曜日23:59まで (終わるまで寝れない) ブログの内容は問わない 4番目に関しては、内容は問いませんがあくまで「InputとOutputのサイクルを回す」「深い知識を得る」という目的に沿っていればOKという前提はあります。 意気込み 頑張るぞ! (これ続かなかったらすごく恥ずかしい結果になりそうだなぁ……)