ElixirのWebアプリケーションフレームワークであるPhoenixにおいて、プラグ機能を使ってエンドポイント毎の認可を実装する方法を説明します。
いくつかの広く普及しているプログラミング言語において、日時型同士の比較に比較演算子 (==や>など) を使うことはよくあります。しかし、Elixirでは日時型の比較に比較演算子を使うと思いもよらない結果になります。
プログラミングにおいて、連想配列のリストをなんらかのプロパティをキーにした連想配列に変換したいということはよくあります。このエントリでは、Elixirでマップのリストをマップに変換する方法を紹介します。
RSpecを始めたばかりの人にとって、letやcontextは最初は少し難しく思えるかもしれません。しかし、letやcontextを使いこなすことでテストの見通しを格段に良くすることができます。このエントリでは、RSpecのletとcontextの使ってテストの見通しを良くする方法を解説します。
Firebaseでアプリケーションを作るときは、データベースとしてFirestoreを使うのが便利です。FirestoreはクラウドベースのNoSQLで、FirebaseやGCPから簡単に扱うことができます。このエントリでは、Firestoreの簡単な使い方とFirestoreルールの設定方法を紹介します。
Reactアプリで表示を切り替えるためにコンポーネントをアンマウントしたときに、エラーが出ることがあります。このエントリでは、Reactコンポーネントのアンマウント時のエラーを修正する方法を紹介します。
react-router-domを使うと、ReactでURLパスによるページ遷移を実装することができます。しかし、ReactやSPAに慣れていない人にとっては、react-router-domの使い方に少し戸惑うかもしれません。このエントリでは、react-router-domを使ったページ遷移の実装方法を紹介します。
ReactアプリにGoogleログインを実装したいときは、Firebase AuthenticationとFirebase SDKを使うと簡単です。むしろ、Firebase AuthenticationやGCPコンソールでのOAuthクライアントの設定の方でハマりがちかもしれません。このエントリでは、ReactアプリにGoogleログインを実装する際の方法を、トラブルシューティングと共に紹介します。
Erlang/Elixirにおいて、Atomを使うことはよくあります。このエントリでは、DoS脆弱性になり得るAtom枯渇(Atom Exhaustion)とその対策について説明します。
エラーハンドリング構文と言えばJavaScriptでは try~catch, Rubyでは begin~rescue, Pythonでは try~except があります。そう、多くの言語でエラーハンドリング構文は1つです。しかしElixirには2種類のエラーハンドリング構文があります(!?)。いったいどんな違いがあるのか説明します。
Go言語(Golang)には固定長の配列(array)と、可変長のスライス(slice)があります。このエントリでは配列とスライスの宣言方法についてまとめています。
Go言語に限らずポインタが存在する言語では「ポインタなのか?値なのか?」ということに常に気を配る必要があります。さらにスライスになると「中身がポインタなのか?」「容れ物がポインタなのか?」「どちらもポインタなのか?」というように、注意すべきことが増え、気を抜くと簡単にランタイムエラーになってしまいます。このエントリでは、スライスとスライスのポインタで異なる初期化方法や要素の追加についてまとめます。
前回のエントリでは、防御的プログラミング、変数、例外などをまとめた。このエントリでは、「CODE COMPLETE」から数値、浮動小数点数、文字列などプリミティブなデータを扱う際の注意点とステートメントについてまとめる。
前回のエントリでは名付け、継承、凝集度などをまとめた。このエントリでは、「CODE COMPLETE」の防御的プログラミングと例外、変数についてまとめる。
「神は細部に宿る」という言葉があるように、洗練されたコードは細部まで無駄がない。洗練されたコードを書きたい人にとって、「CODE COMPLETE」は古いが色褪せないエッセンスに溢れている。このエントリでは、「CODE COMPLETE」の6章「クラスの作成」と7章「高品質なルーチン」の内容をまとめる。
5連休初日に開催されたオンライン勉強会「実践クリーンアーキテクチャ」に参加しました。このエントリでは、個人的に勉強になったポイントをまとめます。
言語を問わず、メソッドの引数にデフォルト値を設定しておく「デフォルト引数」はよく使います。しかしPythonでは、デフォルト引数の定義タイミングはRubyなど他の言語とは異なっており、ハマりポイントとなっています。このエントリでは、Python特有のデフォルト引数の定義タイミングを紹介します。
Ruby on Railsにおいて、アセットパイプラインはデフォルトで有効になっており、JavaScriptファイルやCSSファイルを圧縮して配布するのに使われます。しかし、アセットパイプラインはライブラリ間のバージョン違いによって躓きやすく、「エンジン」を使う場合には、設定に少し戸惑うかもしれません。このエントリでは、Ruby on Rails 6のエンジンでアセットパイプラインを使うための設定を説明します。
Ruby on Railsでの開発において、FactoryBotはもはや切っても切れない存在になっています。しかし、Ruby on Railsでサブアプリを追加する機能の「エンジン」を使う場合には、設定に少し戸惑うかもしれません。このエントリでは、Ruby on Rails 6のエンジンでFactoryBotを使うための設定を説明します。
EctoはElixirのORMで、ElixirにおけるActiveRecordのような存在です。EctoとActiveRecordの書き方はよく似ていますが、言語が違うので当然、違いもあります。このエントリでは、Ectoで複数IDを渡してレコードを取得するメモしておきます。
リンクを生成してくれるlink_toヘルパーは、Ruby on Railsの数あるヘルパーのうちでもよく使われます。link_toヘルパーは、リンクの記述をシンプルにするだけでなく、簡単に確認ダイアログ(confirm)を出すこともできます。このエントリでは、Ruby on Rails 5においてlink_toヘルパーで確認ダイアログを出す方法を紹介します。
Ruby on Railsでは、カスタムバリデーションを使って独自のバリデーションを追加することができます。しかし既存のバリデーションと違い、カスタムバリデーションではi18nによる翻訳を自分で追加しなければなりません。このエントリではRuby on Rails 5において、カスタムバリデーションのエラーメッセージerrors.full_messagesの翻訳を追加する方法を説明します。
Webの開発現場では、GitHubのPull Requestでコードレビューが行われることが多いです。このエントリでは、新人エンジニアが手戻りのないPRを作るためのコツを人気スマートフォンゲーム「クラッシュロワイヤル(クラロワ)」のクエスト機能を例に挙げて紹介します。
AngularJSで、ユーザーの権限によって表示を切り替えるという認可っぽいことをしたいケースがあります。「認可っぽいこと」と言っているのは、データは取得できてしまうものの、非表示にすることでそれらしく見せているためです。このエントリでは、AngularJSでユーザーの権限によって表示を切り替える方法を説明します。
Python3において、メソッドをモックしてテストしたいときがあります。メソッドのモックにはMagicMockがよく使われますが、MagicMockを使ってクラスメソッドをモックすると、テストケースが終わっても影響が残ってしまいます。このエントリでは、範囲を限定してクラスメソッドをモックする方法を紹介します。
Angular.js + Firestoreという構成では、クライアントライブラリとしてAngularFire2を使うケースが多いと思います。メタデータを含めたデータを返す`snapshotChanges()`をスタブするのは少し面倒です。このエントリでは、AngularJSのテストでAngularFire2のsnapshotChangesをスタブする方法を紹介します。
天気予報や地図情報など、世の中の多くのWebサービスがWeb APIを提供しています。プログラミング初学者にとって、Slack Botの開発はWeb APIを学ぶのにちょうど良い題材です。このエントリでは、PythonプログラムからWeb APIを経由してSlack Botに発言させる方法を説明します。
AWSアカウントにはMFA(多要素認証)を設定している場合が多いと思います。そのため、MFAを設定したアカウントでAWS SDK for Python (Boto3)を使うには、先に認証情報を取得する必要があります。このエントリでは、MFAアカウントでAWS SDK(Boto3)を使う方法を説明します。
Python3でシェルコマンドを実行するにはsubprocessモジュールを使います。このエントリではshell=Falseとしながら、安全にシェルコマンドをパイプして実行するコード例を紹介します。
gRPCはGoogleが公開したRPCフレームワークで、gRPCを使うと、サーバー・クライアントで異なる言語間においてもローカルオブジェクトかのごとくメソッドを呼び出すことができます。このエントリでは、公式サンプルを使ってGoで立てたgRPCサーバーのメソッドをRubyクライアントから呼び出してみます。
一般に、継承やMix-inを使わずにメソッドを上書きしてしまうのは推奨されることではありません。読み手にとって何が起こっているかわからないコードは、バグの温床となるからです。しかし、上書きができないというわけではありません。そう、Rubyならね…。このエントリでは、特異メソッドを定義してインスタンスメソッドを上書きする方法を紹介します。
Ruby on Rails 5でAPIを作っていて、デフォルトのリクエストログにユーザーID(user_id)を追加したいということがあると思います。このエントリでは、Ruby on Rails 5でLogrageを使ってリクエストログにユーザーIDを追加する方法を説明します。
Ruby on Rails 5で認証付きのAPIを作りたいというケースがあります。このエントリでは、Ruby on Rails 5でJWTを使った認証付きAPIの作り方と、RSpecを使ったテストの書き方を説明します。
ElixirにおけるMapの更新方法は、対象のキーがある場合とない場合とで違います。このエントリでは、キーの存在で異なるMapの更新方法を紹介します。
Python3ではデフォルト値のないキーワード引数を設定することができます。デフォルト値のないキーワード引数のことを「Keyword-Only Arguments」といいます。このエントリではKeyword-Only Argumentsについて説明します。
Pythonには「デコレータ」(decorator) という機能が標準で提供されています。デコレータはPython以外のプログラミング言語ではあまり見ないので、少々とっつきにくい印象を受けます。このエントリでは、Pythonのデコレータについて説明し、その使い方を紹介します。
Google Cloud Functions(GCF)で永続データを扱いたいと思ったらまず思い浮かぶのが、いつまでも無料枠に含まれているDatastoreですよね。このエントリでは、GCFからDatastoreを利用する方法を説明します。