Rustのasync、awaitを利用し、非同期プログラミングに入門する

本記事はRustアドベントカレンダー2の17日目の記事です。 本記事ではRustのasync、awaitを使って、非同期プログラミングに入門してみたいと思います。 以下のプログラムではfuturesクレートを利用しています。 まずはasyncを使った例を見てみましょう。上記の例はhello worldの文字列を出力するプログラムを、あえてasyncキーワードを利用し記述したものです。 関数が非同期であることを明示するために、asyncを利用します。 block_on関数は非同期処理の実行が終了するまで、処理をブロックするという関数です。 このプログラムを実行するとコンソールにhello worldの文字列が出力され、終了します。

golangci-lintに入門してみる

本記事は東京学芸大学 櫨山研究室 Advent Calendar 2020の17日目の記事になります。 GoのLinterといえば長らくgolintがデファクト的な存在でしたが、つい半年ほど前にdeprecatedになりました。 代替のLinterはいくつかあるようですが、本記事では代替Linterの一つであるgolangci-lintのインストールから実行までを簡単にまとめてみました。 golangci-lintは元々、GolangCIというCIサービス上で動作するように設計されたLinterです。現在ではGolangCI以外のCIサービスでも利用可能となっています。 golangci-lintはそれ自体がLinterツールであるというより、多数あるLinterをまとめて実行するためのツールとなっています。ドキュメントにもgolangci-lint is a Go linters aggregator.という記述がありました。

AWS Lambdaのコンテナイメージサポートを試してみる

本記事は東京学芸大学 櫨山研究室 Advent Calendar 2020の3日目の記事になります。 はじめに先日、AWS Re:InventにてAWS Lambdaのコンテナイメージサポートが発表されました。 どうやらDockerイメージをデプロイし、それをLambda関数として実行できるようです。 Lambdaで動作させるためのベースイメージはAWSから提供されています。 以下の言語でベースイメージが公開されているようでした。 Python Node.js Java .NET Go Ruby また、Lambda Runtime APIを満たす、コンテナイメージを作成することで独自のLambda実行環境を作成することも可能なようでした。 また、今回提供されるベースイメージにはLambda Runtime Interface Emulatorという機能が内包されており、ローカル環境でLambdaを実行できるようになったようです。

3ヶ月間のブログメンタリングを終えて

今年の3月からカックさんのブログメンタリングに参加し、毎週ブログ更新を3ヶ月間続けてきました。 そして今日でメンタリング期間が終了します。今回は、ブログメンタリングを3ヶ月受けてみた感想について書いていきたいと思います。 ブログメンタリングでは、自分の書いた記事のレビューをカックさんにしてもらえたり、ブログサイトの改善、OSSへのコントリビュート方法などを教えてもらえます。 詳しい内容については以下の記事を参考にしてみてください。 カックさんがどのような方かを知りたい場合は、以下のポッドキャストを聞くといいと思います。このポッドキャストは、普通に勉強になりますし、熱い気持ちになれるのでおすすめです! もし、ブログメンタリングに応募しようと考えている方は、絶対にこのポッドキャストを聞いてから応募するのがいいと思います。 私はブログメンタリング終盤でこのポッドキャストを聞き、もっと早く聞いておけばよかったと後悔しました。

実践的なアジャイルプラクティスを学べるカイゼン・ジャーニーを読んだ

カイゼン・ジャーニーを読み終えたので感想を書きたいと思います。 カイゼン・ジャーニーはストーリー調で話が進んで行くのでとても読みやすかったです。とある企業でのチーム開発の物語で、主人公がチームでプロダクトを作成する過程で様々な困難とぶつかりながらも成長していくといったストーリーです。 本の表紙にアジャイルという言葉が出てくる通り、アジャイル開発についての本です。しかしながら本で紹介されているプラクティスはアジャイル開発でもそれ以外の開発でも使えるものが多かった印象です。紹介されているプラクティスは実践に基づいたものであるため、他の本では紹介されていないような一歩踏み込んだプラクティスが多かった気がします。本の冒頭でも紹介されているのですが、プラクティスをそのまま導入するのではなく、自分たちのチームに適応できるかを一度検討する必要があると記述されていたのも印象的でした。

[Deno] ライブラリをimportする

Denoを触ってみた際のメモです。 Denoはnpmなどのパッケージマネージャーは存在しません。 ライブラリを利用するにはライブラリのコードが存在するURLを指定してimportします。 もちろんローカルにあるファイルを相対パスでimportすることも可能です。URL指定したimportの形式は以下のようになります。 例えば、標準のlogパッケージを利用するときは以下のように書きます。 依存しているモジュールはメインの関数を実行するときに、指定されたURLからローカルにダウンロードされます。 2回目の実行時はURLにはアクセスせず、ローカルのダウンロードを利用します。

GitHubのテンプレートリポジトリ機能について

GitHubにテンプレートリポジトリという機能があるのをご存知でしょうか。 2019年の6月に発表された機能で、その名の通りテンプレート用のリポジトリを作成できる機能です。 テンプレートリポジトリを選択してリポジトリを作成すると、テンプレートリポジトリ内のファイルがコピーされた状態でリポジトリが作成されます。 リポジトリのForkと少し似ていますが、以下の点でForkとは違います。 コミット履歴が引き継がれない 自分で作ったテンプレートリポジトリを自分で利用することができる

ブログメトリクスの可視化Webページの技術要素

現在、ブログメンタリングを受けていて、毎週1記事を目標にブログを投稿しています。 ブログメンタリングについては以下の記事を参照してみてください。 メンタリング期間中は毎週メトリクスを確認するように言われていますが、メンタリング開始から数週間たった後に「Web上でメトリクスを可視化できたらいいかも」と思い立ち、メトリクス可視化Webページを作りました。 Webページの画像は以下です。 今もこのWebページを運用していますが、URL一つでブログのメトリクスを参照できるのは結構いいです。 今回はこのWebページの技術要素について書いていきたいと思います。

[ESLint] eslint-plugin-importを利用して自動でimportをアルファベット順にソートする

以前までTypeScriptの開発ではTSLintを使っていましたが、TSLintの開発が縮小されていくということもあり、最近はESLintを利用しています。 TSLintにはimportがアルファベット順に並んでいないと警告を出してくれるorderd-importsというルールがあります。autofixもサポートされており、VSCodeのTSLint拡張を使うと保存時に自動でアルファベット順にソートしてくれていました。 ただ、ESLintに移行するとこれに代替する機能が標準ではありませんでした。

TypeScript 3.7から利用できるOptional Chainingについて

半年ほと前にTypeScript 3.7がリリースされ、Optional Chainingが利用できるようになりました。 ここ最近で仕事でもよく利用しており、とても便利なので紹介したいと思います。nullチェック、undefinedチェック TypeScriptのコードを書いていると、nullチェック、undefinedチェックをするコードはたびたび頻出します。 例えば以下のようなFooという型があったとします。 以下のFooという型はオプショナルなbarというプロパティがあり、barの中にはオプショナルなbazというプロパティがあるとします。