アルパカログ

プログラミングとマネジメントがメインです。時々エモいのも書きます。

プログラミング

続々・CODE COMPLETE 〜美しいコードを書くために〜

前回は主に防御的プログラミング、変数、例外について書いた。今回は主に数値、浮動小数点数、文字列などプリミティブなデータを扱う際の注意点とステートメントについてまとめる。

続・CODE COMPLETE 〜美しいコードを書くために〜

前回の記事では主に名付け、クラスと関数、抽象化と継承について書いた。今回は防御的プログラミングと例外、変数についてまとめる。

CODE COMPLETE 〜美しいコードを書くために〜

新しい技術に触れるたび、というより、必要になるたび検索して知識をツギハギして補ってきたが、最近は本格的に知識不足を実感するようになってきた。いろいろ忘れてもいるし、一度基礎から学び直さなくてはということで、美しいコードを書くという初心に返…

勉強会「実践クリーンアーキテクチャ」参加記

5連休初日に開催されたオンライン勉強会「実践クリーンアーキテクチャ」に参加しました。 nrs-seminar.connpass.com 私は最近仕事でクリーンアーキテクチャを採用したプロジェクトに関わるようになったのですが、いろいろ調べてみても概念的な話が多くいまい…

ポケモン剣盾のバトルシミュレーターを書いた

ポケットモンスターソード&シールドを発売以来ずっと遊んでいて、対人戦(シングルバトル)でいろいろ試したいなーと思ったので、2月3月の可処分時間のほとんどを開発に突っ込んで作った。権利まわりが怖いのでデータやソースコードは公開していない。 シミ…

RubyとPythonで仮引数のデフォルト値がオブジェクトのとき挙動が違う

仮引数のデフォルト値は、Rubyではメソッドが呼ばれたときに作られ、Pythonではメソッドが定義されたときに作られているように見える。 業務ではRubyを書いていて、プライベートでPythonを書いていてハマったのでメモ。最後の hoge2.foo に注目してみてくだ…

Rails6エンジンでアセットパイプラインを使う

Ruby on Rails 6 のエンジンでアセットパイプラインを使う設定方法をメモしておきます。 エンジンは以前は Mountable Engine と呼ばれていたと記憶していますが、今では単に「エンジン」と呼ぶようです。 エンジンについては下記チュートリアルを参照してく…

Rails6エンジンでFactoryBotを使う

Rails6のエンジンでFactoryBotを使うための設定をメモしておきます。 エンジンについては下記チュートリアルを参照してください。以下、エンジン名はチュートリアルで登場する Blorgh を使って説明します。 Rails エンジン入門 - Railsガイド

GitHub Actions(YAML)でTerraform plan/applyを自動化する

GitHub Actions のワークフロー設定ファイルは、以前はHCL形式でしたが最近YAML形式に変わったようです。なので、YAMLの例がまだあまり出てきません。 個人で使っているAWSリソースをTerraform化して、GitHub Actionsで自動化したのでその方法を紹介したいと…

2種類のページングについて書きました

会社のブログで2種類のページングについて記事を書きました。よかったらご覧になってください。 medium.com

EctoでIDリストを指定して取得するときのメモ

久しぶりに書くといつも忘れるのでメモ。 ActiveRecord users = User.find(user_ids) users = User.where(id: user_ids).all ActiveRecordでは上記のようにidsをそのまま渡すところ、Ectoだと次のように書く。 Ecto users = User |> where([user], user.id i…

【Rails5】link_toにdataとclassを同時に指定する

link_to ヘルパーはRuby on Railsの数ある便利なヘルパーのうちのひとつです。 link_to ヘルパーを使うとリンク先の指定がシンプルになるだけではありません。 POSTやDELETEなどのHTTPメソッドが指定でき、さらに data オプションを指定するだけで confirm …

【Rails5】カスタムバリデーションのエラーメッセージをi18nに対応する

Ruby on Rails 5 で、カスタムバリデーションを追加したときに、エラーメッセージ(errors.full_messages)の翻訳で少々ハマったのでまとめておきます。

Gunicornで先に重い読み込みを済ませておくpreload_appオプション

PythonのWebサーバーGunicornにはワーカーのためにプロセスをフォークする前に、重いファイルをプリロードしておけるオプションがあります。 例えば機械学習のモデルや辞書といったような重いファイルをロードして使うようなアプリケーションでは、ワーカー…

【AngularJS】権限によって表示/非表示を切り替える認可っぽいことをする

AngularJSで権限によって表示したり非表示にしたりといった認可っぽいことをする方法を説明します。 「認可っぽいこと」と言っているのは、データは取得できてしまうものの、非表示にすることでそれらしく見せているためです。ですのでこの方法は、厳密にユ…

【Python3】範囲を限定してインスタンス/クラスメソッドをmockする

Pythonのテストでメソッドをmockするとき、インスタンスメソッドはよくMagicMockを使ってmockしますが、クラスメソッドの場合はmockするとテストケースが終わっても影響が残り続けてしまいます。 これはクラスとインスタンスのライフサイクルの違いによるも…

【AngularFire2】テストでsnapshotChangesをスタブする

Angular.js + Firestoreという構成ではAngularFire2を使うケースが多いと思います。 AngularFire2ではFirestoreからデータ(コレクション)を取得するとき、valueChanges()とsnapshotChanges()の2つの方法があります。 3. Collections in AngularFirestore こ…

GoでサイボウズガルーンのREST APIクライアントを書いた話

以前、ガルーンの予定をSlackからインタラクティブにリスケできるBotを作った話をしました。 このBotを作ったとき、実はガルーンのREST APIのGo向けクライアントがなかったので自作しているのですが、今日はその自作したガルーンREST APIクライアントの話を…

【Python】リストをN分割する

[arr[i::n] for i in range(n)] arr: 分割したいリスト(配列) n: 分割数 >>> arr = [1, 2, 3, 4, 5, 6, 7] >>> n = 3 >>> divided_arr = [arr[i::n] for i in range(n)] >>> divided_arr [[1, 4, 7], [2, 5], [3, 6]]

Slack Botで学ぶPython

Slack Botはプログラミングを学ぶ上でちょうどいい題材です。 例えば、英語のために英語を学ぶのは退屈ですが、海外旅行などで実際に英語を話す体験があるとやる気が出ますよね。 プログラミングも同じように、書いたプログラムが自分の生活をちょっと便利に…

Golangの勉強がてらMTGをリスケするSlack Botを作った

年末年始、Golangの勉強を始めようと思い、SlackからインタラクティブにMTGをリスケできるBotを作ったので、その話をしたいと思います。 github.com

【Python】MFAアカウントでBoto3からAWS SDKを使う

AWS SDK for Python (Boto3) をMFA を設定したアカウントで下記のように普通に使おうとするとエラーになってしまいます。 import boto3 client = boto3.client('sagemaker-runtime') MFA を設定しているアカウントでは、下記のように STS クライアントを使っ…

【Python3】パイプありのシェルコマンドを実行する

Python からシェルコマンドを実行するには subprocess モジュールを使うのが定石かと思います。 パイプありのシェルコマンドの実行方法を調べると、たいてい shell=True として 'command1 | command2' のような文字列を渡す例がよく出てきます。 しかし、こ…

pixela_ex という Pixela の Elixir クライアントを作りました

Pixela という草を生やすサービスがあって、詳しくは作者 a-know さんのブログを見て欲しいのですが、それの API クライアントを Elixir で作りました。 blog.a-know.me github.com

【Elixir】再帰の書き方メモ

Elixir は再帰がすっきり書けてとても気持ちがいいですね。 でも、たましか書かないとすぐに書き方を忘れてしまうのでメモしておきます。

Goで立てたgRPCサーバにRuby/Elixirクライアントで接続してみる

gRPCはGoogleがOSSとして公開しているRPCフレームワークです。 gRPCを使うと、異なるマシン/言語間でもローカルオブジェクトかのごとくメソッドを呼び出すことができます。 詳細は下記をご覧ください。 grpc / Guides 和訳 gRPCとは何か? - Hapoon Labo 今…

【Ruby】特異メソッドを使ってインスタンスメソッドを再定義する

今日は Ruby の特殊な使い方、特異メソッドを使ってインスタンスメソッドを書き換えてしまう方法を紹介したいと思います。 黒魔術的になってしまうので推奨されませんが、こんな風にすればできるよということで、自己責任でお使いくださいね。

【Elixir】HTTPotionでお手軽APIクライアント作成

Elixir で API クライアントを作るときは HTTPotion の metaprogramming magic を使うと簡単です。

【Ruby on Rails】Logrageでuser_idをログに記録する

Ruby on Rails 5 で API アプリケーションを使っていて、Lograge でリクエストログに user_id を追加するときちょっとハマったのでメモしておきます。

【Ruby on Rails】API認証とRSpecの書き方

仕事で Ruby on Rails 5 を触る機会があり、API 認証まわりを調べたのでテストの書き方もあわせてまとめておきます。