りんごとバナナとエンジニア

エンジニア修行の記録

AWS Budget + AWS Chatbotで使用料金のアラートをSlackに飛ばす

AWS

以前EKS上のClusterを一月以上に渡って止め忘れ、大変な請求が来てしまったことがある。 個人練習用のEKS Clusterを落とし忘れてて5万溶ける悲劇が起きました。これを教訓に請求アラームを設定することにしよう。— どもも (@Udomomo) August 13, 2019 二度と…

YAMLでハッシュの入れ子を作りたい時

先日CircleCIの設定ファイルを書いていたとき、思うように読み取ってくれず詰まったのでメモ。 YAMLのインデントは、ファイルの中で統一されてさえいれば任意の数で良いのだが、一つ意識しなければいけない場合がある。 下のようなyamlを書くと連想配列とみ…

スクラム未経験者が初めてスクラムチームに入るときに必要な考え方

先月から、スクラムチームに入って仕事をするようになった。スクラムというやり方自体が会社としてほとんど前例のない取り組みであったため、うまくいっている所もあれば、チーム外に非常に迷惑をかけてしまっている部分もある。 個人的には、1人とか2-3人で…

「GitHub実践入門」でGitHub Flowを学び直した

gihyo.jp GitHubは普段の開発でよく使っているので基本的な操作は問題ないと思っていたが、今後恥をかきたくないと思い改めて学ぶことにした。 この本はgitコマンドの基本的な使い方から始まり、GitHubのコンソールの機能の紹介、hubコマンドやいくつかのCI…

【Python】heapqで優先度つきキューを理解する

先日のAtCoder Beginners Contest 141に参加したのだが、問題Dを解くことができなかった。 この問題を言い換えると、要は「数値型の要素で構成される配列において、最も値が大きいものを1/2にするという作業を繰り返し、最終的な要素の合計を求める」という…

TDDワイワイ会でテスト駆動開発に再挑戦しました

tddyyx.connpass.com 最近会社のチームでTDDをやり始めたばかりなのですが、チームの先輩に誘われてTDDをやってみるイベントに参加してみました。TDD本は読んだことがあるのですが、あまり腹落ちしきっておらず、もう一度読まないといけないかなと思っていた…

Builderscon 2019に参加しました

builderscon.io 金曜日にBuildersconに行ってきました。今回聞けた発表は全部で3つだけでしたが、この1年で経験が増えたためか、闇雲に部屋を回っていた去年よりもそれぞれの発表を面白く聞くことができました。とても満足しています。 はじめてのB2B SaaSデ…

【Rails】devise_mailで送信元メールアドレスを動的に変える

Railsでdeviseを使ってメール送信機能を作るとき、送信元のアドレスは通常いつも同じで済むことが多い。 セオリーなのは、 config/initializers/devise.rb にある config.mailer_sender の項目に送信元アドレスを書くことだろう。 # ==> Mailer Configuratio…

【書評】「におうコードの問題集 ソフトウェア設計に立ち向かう編」を読んだ

booth.pm 以前からソフトウェア設計に興味はあったものの、単にデザインパターンを暗記したところで役に立ちそうにないし、どう学べばいいだろう?というのがずっと悩みだった。そんなとき読んだこの本が、設計との向き合い方に対する一つの指針を示してくれ…

過去のFirebase AnalyticsエクスポートデータをBigQueryにアップロードし直す

今個人で扱っているアプリケーションでは、Firebase Analyticsでデータを計測し、それをBigQueryにエクスポートした後に処理している。過去の日付分のテーブルを置いたままだと料金がかかるので普段は日付ごとに消しているのだが、過去にテストとして流した…

大容量のファイルをsplitコマンドで分割する

先日、数GBある大きなログファイルをテストに使う機会があったが、同じ日付のファイルが複数あるときのテストがしたかったのでファイルを適当に分割する必要が生じた。自分でファイルの一部をコピペしてもいいのだが、splitコマンドを使うと手軽に分割できる…

アジャイル研修を受けて学んだ「アジャイルの価値観と原理原則」

先日、会社の開発チーム全員でアジャイル研修を受けた。プロのアジャイル講師が来て、1日かけて講義と実践を交えてアジャイルのやり方を説明してもらったのだが、いろいろな気づきがあった。 研修前の状況 自分のチームでは一応1週間ごとにスプリントを区切…

「エンジニアリング組織論への招待」1-2章に学ぶエンジニアのコミュニケーションスタイル

gihyo.jp 最近、社内の同じ開発チームの人とのコミュニケーションに悩むことが多く、見かねた先輩がこの本を勧めてくれた。 実はこの本は前にも一度読んだのだが、その時は何の課題意識も感じていなかったのか大して頭に残っていなかった。それが今回もう一…

マージコミットと通常のコミットのただ一つの違い

タイトルは先日、会社の先輩に突然出題されたもの。その時は答えられず教えてもらった。 コミットオブジェクトとは Gitによって記録されるのは、SHA-1でハッシュ化されたものにすぎない。Gitの内部では、ファイルのコンテンツをハッシュ化したblobオブジェク…

Gitリポジトリ移行時にgit remote rm -> addとすべきでない理由

Git

先日、とあるリポジトリをBitbucketからGitHubに移行させた。念のためプッシュしていない変更がない状態にしておき、リモートリポジトリを無事に移した。あとはローカルリポジトリで指定しているremoteを更新するだけだったのだが、その時以下のようにやって…

Data Pipeline Casual Talk Vol.3 に参加しました

dpct.connpass.com 会社の人に紹介されてイベントの存在を知りました。 普段は自社サービス(一種の分析ツール)のデータ処理・加工部分の機能開発を担当しており、大量のデータをアプリケーションから分析・表示できるようにすることがミッションです。最近…

「プログラマが知るべき97のこと」を読み直した

「プログラマが知るべき97のこと」をGWから少しずつ読み直していた。実は昔一回一通り読んだのだが、それから公私でいろいろな経験を積んだためか、今回読み直してみたらまさに何度もハンマーで殴られる感覚を味わうことになった。 GWに「プログラマが知るべ…

アプリケーション作成の原則「The Twelve-Factor App」を読んだ

12factor.net Dockerに関するウェブ記事の中にたまたま名前が出ており、気になって見てみたら、示唆に富み奥の深い資料だった。 この資料は、HerokuのエンジニアであったAdam Wiggins氏が、大小様々なSaaSアプリケーションのデプロイに接した経験をもとに、…

【Rails】RSpecで特定のテストケースだけbeforeをスキップする

RSpecでは、before do ... endを使うことで、各テストケースの前に共通して行う処理を記述できる。これを使ってテストデータを投入する処理などを書いておくと、テストケースが書きやすくなる。 しかし、例えばデータが1件もない状態での挙動をテストしたい…

【Rails】Strong Parametersにおけるrequireとpermitの違い

RailsでStrong Parametersを使ったパラメータの受け渡しをするとき、よく params.require(:task).permit(:title, :content)のように書く。このとき、requireと permitはどう異なり、なぜ両方使うのかがよくわからなかった。 公式にあたってみると、APIドキュ…

RailsのActiveSupport:Concernの役割

Railsで共通部分をmoduleに切り出し、Concernを使う機会があったが、そもそもRubyであまりmoduleを使ったことがなく、Concermが通常のmodule機能と比べてどう特殊なのかわからなかった。この機会におさらいしてみる。 Rubyのmoduleの使い方 まずはRails以前…

【Java】メソッド参照とラムダ式の関係

Java 8以降には、メソッド参照というものがある。全くなじみがなく今まで触れずにいたが、調べてみるとラムダ式をさらに簡略化した記法らしい。 引数をパススルーしているかどうか Javaをメソッド参照に置き換えられるのは、主にパラメータをパススルーして…

jqで少し複雑なjsonを検索+ソートする

udomomo.hatenablog.com 以前の記事で、jqを使って小さな困りごとを解決したことを書いたが、あれから実際にjqをいろいろな場面で使い始めている。とはいえ最初はけっこう試行錯誤したので、実際に使ったコマンドを忘れないように記録しておきたい。 jqとは …

Javaのジェネリクスを理解する

最近Javaのドキュメントを読む機会が多いが、APIの中では普段の仕事であまり使わないジェネリクスが使われていることが多く、たちまち読めなくなってしまう。時間のあるうちに、ジェネリクスの理解を深めておきたい。 ジェネリクスはなぜ生まれたか 今では当…

きれいに整形されたjsonを1行に戻す方法

JSONを読みやすく整形するツールはいろいろなIDEやウェブサイトにあるが、元に戻すツールはあまりない。しかし、例えばJSON形式のデータを1行ごとに処理するシステムのテストデータを作るときなどは、可読性の高い状態でJSONを作っても、それを1行に戻さなけ…

「ワンストップ見積もり本」で見積もりのやり方を学んだ

note.mu 先日の技術書典6で、親方Projectさんが販売されていた本です。 ちょうどこの前、見積もりが全然できておらず目標を達成できなくて怒られたばかりなので、買ったその日に真剣に読みました。 この本は、プロジェクトやタスクにかかる時間・工数をどう…

@kakakakakkuさんのブログメンタリングを卒業しました

1月から3月まで、@kakakakakkuさん(カックさん)のブログメンタリングを受けました。 メリークリスマス!新規ブログメンティを募集しまーす!今回の募集人数は1-3名です.メンタリング開始日は 1/1 (火) です.・ネタをどう探すか?・どう習慣化するか?・ど…

KafkaをDockerの外から叩けないときに確認すべき設定

Dockerで立ち上げたKafkaを、ホスト環境でビルドしたJavaアプリケーションから叩こうとしたのだが、なぜかエラーになって叩けず。 java.lang.IllegalStateException: No entry found for connection 21729123512 よく調べてみると、advertised_listenerの設…

[GitHub] hub pull-requestの宛先がフォーク元のリポジトリにならない場合の対処法

hub.github.com GitHubの公式コマンドラインツールであるhubの存在を知り、最近使い始めている。いろいろな作業がコマンドからできてとても便利なのだが、フォーク元のリポジトリにプルリクエストを送るところで詰まってしまった。フォーク元のリポジトリを …

コマンドラインでCSVをソートする方法まとめ

結合テスト後の結果比較や生データの処理などのために、数MBくらいのCSVを取り扱いたい時がある。なかでも、いろいろな処理を行う前に、たいていtimestamp等で各行をソートする必要があることが多い。エンジニアになる前はExcelを開いて頑張っていたけれど、…