何でも屋エンジニアのブログ

ソフトウェア関連技術、コミュニティ、日々の雑貨

Consul DNSとDnsmasqについて調べたメモ

Dnsmasqは.consulへのDnsへの問い合わせ(port 53)をConsul DNS127.0.0.1#8600)に問い合わせるために使っている。

通常、DnsUDPポートの53を使うが、rootアクセスを必要とする。consulを特権ユーザーで動さずに使うために、適切にクエリをconsulにフォワーディングする。 https://www.consul.io/docs/guides/forwarding.html

より詳しくは、

consul は DNS形式でノード情報を提供しますが、この時のアクセスポートが 8600番なのでそのままでは DNSゾルバが行えません。 dnsmasq を利用することで、マシンローカル(127.0.0.1)のリクエストを別ポートにプロキシすることができるので、それで consul の DNS を利用できるようになりますがマシン 1台内で閉じています。

https://qiita.com/rerofumi/items/237c971ed100db6385d2

とのこと。

設定としては、ドキュメントにある通り、

# /etc/resolv.conf
nameserver 127.0.0.1
# /etc/dnsmasq.d/10-consul
server=/consul/127.0.0.1#8600

とすれば良い。これでdns問い合わせを自身の8600番ポートへフォワーディングできる。

基本として/etc/hostsになければresolve.confに記載されている順でnameserverに問い合わせる(strict-orderがtrueなら)ので、このような設定でフォワーディングできる。

ところで、address=の設定値でIPアドレスを直打ちでき、設定されたルール、curl -s localhost:8500/v1/catalog/nodesとかしてゴニョゴニョしてaddressの値に設定すると、nodeの入れ替えが少ないもの(例えば検証環境とか)に関してはdns問い合わせを行わないことも可能。 manページ--address=の項を参照。/etc/dnsmasq.d/に設定ファイルを置く。

他の参考 https://www.infiniteloop.co.jp/blog/2015/04/how_to_use_dnsmasq/ https://server.etutsplus.com/dnsmasq-setup-internal-dns-with-resolver-cache/ https://wiki.archlinux.jp/index.php/Dnsmasq http://www.thekelleys.org.uk/dnsmasq/doc.html

ところで、DNSと関係ないけどleader election時、3台のserverが存在するケースでleaderが落ちserversの台数が2台になった場合はどうなるんだろう。 あと、同様にleaderが落ちて4台になってしまった場合もどうなるんだろう(raftについて調べてないのでこのようなケースに対応できるか知らない)。

ドメインごとにgit configのusernameとemail設定できるツールを作った

flex-git-configという${ghq_root}/$domain/ 配下のgitconfigを設定するツールを作りました。

github.com

動機

先日仕事で開発環境が壊れて直しているときに、ディレクトリを削除してセットアップし直した際にgit config --local user.nameをやり忘れGHEではなくGithubのアカウントが紐付いてしまいました。その時は1ディレクトリだったので手でgit configを打ったのですが、emailとusernameはGHEの特定のドメインのみ該当する仕事で使用するemailで設定したい場合が多く、まとめて設定するツールが欲しいなと思い書きました。

その他

実行方法は

$ flex-git-config -u YOUR_USERNAME -e YOUR_EMAIL -d "github.com"

です。

内部ではghqを使って-dオプションで渡されたドメインにマッチするディレクトリを取得し、git config --localを呼んでいる簡単なものになります。

勉強中のGoを書きたい欲が強かったので、他に同様のツールがあるか等特に調べずに勢いで書きました。まだテストもなくローカルで動くか確認したのみなので、テストとCI追加してソースもキレイにしていきたいです。

楽しかった。

ペアプロをやるにあたって先に読んでおいて欲しいこと

最近特定の一人とペアプロがすることが多かったのですが、また別の人とペアプロをやる機会ができたので、ペアプロをする前に読んでおいて欲しいことをまとめておきます。 主に物理的な準備と、心構えについて書きました(経験に基づくものなので、網羅的な一般的な話は本を読んで頂くのが良いです)。


取り掛かる前に

目標or時間を決めましょう

リファクタリングの場合は特に時間を決める必要性が高いです。リファクタリング他にも直したいところが出てきてしまいがちで、永遠と時間を取ってしまい疲れてしまいます。新規開発の場合は、目標に対しての進捗が比較的分かりやすいですが、それでも上限の時間を決めておくに越したことはありません。

飲み物・食料を用意しておきましょう

思った以上に体力と喉を使います。体調を壊さないようにやりましょう。

進めている最中

休憩を取りましょう

60 ~ 90分くらいで休憩の声掛けを気づいた方がするようにしましょう。ただし、それより早く休憩したい場合は、お互い気にせず休憩したいです!って言いましょう。

  • トイレ休憩
  • のどかわいた
  • お腹すいた
  • さすがに疲れた...

などなど、理由はなんでも良いのでキツくなったら休憩をはさみましょう。二人が協力して進めているので、二人の力が最大限発揮されるような環境を作りましょう。

コミュニケーションをしっかり取りましょう

なんか上手く進んでいないな?と思ったら、進捗が悪くても一旦進める手をとめて原因を考えてみましょう。相手も同じように考えているかもしれないし、感じた違和感がより良い時間にするためのヒントである可能性もあります。遠慮しないで意見を言いましょう。

終わった後

最後に必ずふりかえりをしましょう
  • 新たなメンバー同士で行う初回は、進捗が出ないことも多いです。コミュニケーションのとり方を学び、お互いの理解度を把握し、適切な進め方をふりかえりの場で考えましょう。
  • ProblemとTry出すことで気をつけるべきことが明確になり、気持ちが楽になります。
    • うまくいかないまま原因を究明せずに終わると、お互いがお互いに対し責任を求めたり、ペアプロ自体が辛くなってきてしまいます。
    • 反省点・悪いところが出てくる場合、なるべく仕組みで解決するようにしましょう。
  • せっかくお互い学べるチャンスなので楽しく進めましょう!
  • めっちゃうまくいってる場合、楽しい気分で終われているはずなので褒めあってもっと楽しく終わりましょう。

Step-to-Rails-Expert.rb第19回の開催レポとこれからの企画について

5/21(月)にStep-to-Rails-Expert.rb第19回を株式会社Speeeさんで開催しました。

step-to-rails-expert-rb.connpass.com

流れ

今回はもくもく会でした。

当日の流れは

  • 自己紹介
  • 会の概要説明
  • もくもく
  • 懇親会

という形で進めました。

会の様子

参加者のあっきーさんがすごく丁寧にブログに書いてくださっているので、そちらのリンクを貼あります。

akinov.hatenablog.com

Step-to-Rails-Expert.rbのこれからについて

今回も@sinsokuさんからアドバイスを頂き、色々考えた結果企画を一旦もくもく会ベースに変更しようと考えております。具体的には、会の企画に柔軟性をもたせ、必要に応じてレビューをしたり作業をしたり話したりできる場として進めていきたいと考えています。

この変更をする私個人の理由としては

  • なるべくコードを書く時間が欲しい
  • レビューされる必要のある仕様を追加するコードを書きたいというより、Railsの新機能やRails外のことも色々試してみたい&話したいという欲求の方が強くなってきた
  • 進行管理が大変

会全体の課題としては

  • レビューの仕方や指摘事項としては学べた
  • 何か機能を実装するより、Railsの新機能を試したりするベースアプリとしての使用も増えてきて、そのような人たちにはレビューすることでのメリットが生まれにくくなっている。少なくとも、定期的に行うのではなく需要が発生したときにそのような企画にするorもくもく会の中で有志がレビューするような形の方が、柔軟で良いのではないか

  • レビューにすると変更分の多くに目を通すことになるが、聞きたいこと・興味のあることは変更分の全てではないはず

  • 時間が足りなく、駆け足になってしまう

  • 初回の人は指摘内容が同じになってきてしまう

というものになっています。会が進むにつれて、例えばRailsをアップグレードする作業なども行う必要がありますが、これは(特に小規模のアプリの場合)企画としてレビューする必要性が薄いと感じています。同様に、ActiveStorageを試している方が参加者にいますが、レビュー時はレビュワーがこんな使い方があるのか、と知る場になっていて、これは別にレビューを行わなくとも進めることができるのではないか、という思いがあります。

ただし、レビューに向けて作業をしてくださっている方もいるかと思うので、移行期間として、次回やその次の回は主催者&スタッフと参加者で興味ある方レビューを行うこととします。それ以降は、一旦全体の差分を見てレビューを行うことはしない予定でおります。

しかしながら、上述の通り「柔軟性をもたせ」た運営をしていくので、必要に応じてレビューを行うような企画にしたり、以前のように議論形式の企画にしたり、目的に応じて参加者にも楽しんで頂ける会にしていきます。引き続きご参加いただければ幸いです。

次回について

次回は6月18日(月)に株式会社Speeeさんにて開催します。気軽にご参加ください。 移行期間のため希望者がいらっしゃればレビューしますので、レビュー希望の方もご参加ください!

Step-to-Rails-Expert.rb第17回を開催しました

3/19(月)にStep-to-Rails-Expert.rb第17回を株式会社Speeeさんで開催しました。

step-to-rails-expert-rb.connpass.com

流れ

今回はレビュー会でした。

当日の流れは

  • 自己紹介
  • 会の概要説明
  • レビュー会
  • 懇親会

という形で進めました。

会の様子

今回は初めてキャンセル待ちが発生する状況で、当日体調不良やお仕事の関係で来られない方がいたもののそれでも12人の方に参加して頂き大盛況でした(この人数はMastodonをテーマにした会以来ですね) その中で、今回は4人のレビューを行いました。5人のレビュー依頼があったのですが、お一人は時間の関係で出来なかったので、次回以降優先的に行いたいと思います。

PRのURLは以下になります(実施順)。レビューの内容については、以下を見て頂ければと思います。

個人的には、神速さんのbackportを取り入れた実装が参考になりました。特に、Railsのバージョンを確認して、バージョンが上がっていた場合はエラーを吐く実装は必要性を強く実感しました。あと、meganemuraさんがパスワードレスの認証機能の実装を自前でやっていて、まだ完成形ではないですが続きの実装がとても気になりました。Sorceryの方ででマジックログインの実装に関わった経験があるので、どのように実装するのが良いか話せると面白いなぁと考えています。

PRのコメント以外で話したこと{#aaa}

  • diff を見る時のURL
  • system test ではデータベースのお掃除はいい感じでやってくれるので、database rewinderは要らないかも。
  • backportは、railsの新しい機能を予め入れておくこと。
  • メアドチェックの正規表現は1ページくらいあるやつもある。
  • おすすめメールアドレスバリデーション。
    • GitHub - balexand/email_validator: An email validator for Rails 3 and 4.
    • 2つモードがある。ゆるいモードと厳しいモード。
    • ユーザが先頭とか末尾にスペースをつけてしまうときがある。たまにrailsがスペースを消してくれないので、スペースありのメアドで登録されてしまい、ログインできなくなるという問題が発生する。
  • find系のメソッド使うときに例外返すかnilになるのかは要注意。権限がない系は404エラーにしたり、nilにする場合はその後の動作を考慮した上で実装すべき。
  • 認証用のテーブルをあえて別テーブルにした。
    • 認証系とユーザのテーブルを分けたいっている思想に触れたければomniauthを見ると良いかも。
  • RuboCopのdefaultだと中身のないメソッドはセミコロンで1行で書くように言われる。
    • 最初の設定だと辛いのでonkcopが参考になる。
  • ユーザプロフィールを更新するときにcurrent_userにそのままパラメータをセットしてupdateするのは危険。バリデーションエラーになっても共通セッションでそのまま保持し続ける。

次の仕様について

引き続き、現在の提示されている仕様に追いついた人がまだいないので、追加なしです。

学び

普段だいたい一人で行っていて大変だったので、今回は人数が多いこともありタイムキーピングやメモ取りをスタッフの@two_sannにお願いしました。かなり良い感じに進められたのとブログを書くのがすごく楽になるので次回以降もお願いしていこうと思いました。他にも私しか行っていない作業が多いので、流れややり方など徐々に共有していきたいと考えています。

次回について

次回は4/23(月)株式会社Speeeさんにて開催します。もくもく会となりますので、気軽にご参加ください。 アプリは作ったけど出席できなかった方や時間がなくてレビューしてもらえなかったという人は持ってきて頂ければレビューしますので、ぜひ再度ご参加ください!

転職しました

LICTOOR株式会社からGMOペパボ株式会社に転職しました。

LICTOORについて

LICTOORでは、ほぼ全ての案件で要件定義から実装・保守運用まで行い、他にも新技術の採用にも携わりました。前職で積んだ経験は非常に貴重で、他の会社で働いた場合には積めないような経験が多くありました。

そして働き方の面でも、人数も少なく余裕はなかったものの融通を効かせてもらうことが多くとても働きやすかったです。比較的融通が効きやすいのはスタートアップのメリットだと思いますが、リクトールの場合は雰囲気も良く、殊更その良さが際立っていたと思います。

LICTOOR株式会社はこれからも満足度の高い受託開発と、世の中をより良くする自社サービスを提供していきますので、何卒宜しくお願い致します。

現職について

転職した理由の一つに、より多くのエンジニアと一緒に働き切磋琢磨したい、という気持ちがありました。働き出して少し経ちますが、技術的なコミットだけでなくプロダクトへの貢献の意識が高く、非常に刺激的な環境です。評価制度もよくできていて、個人がPCDAサイクルを回すことを制度的に実現するように設計されていて、いるだけで成長できる環境というのはこういうことか、と非常に納得しています。 しかしその一方で、求められるレベルが高く評価自体は甘くないため、正直焦りもありますが、なるべく早く慣れていき自分の得意な分野で少しでも良い影響を組織に与えていければと考えています。

仕事、OSS活動、コミュニティ活動と今までより高いレベルで取り組むことを目標に、これからも頑張っていきます。 中級者向けのRails勉強会Step-to-Rails-Expert.rbも引き続き行っていきますので、是非ご参加ください。

最後に

転職にあたり、以下の企業様には特に良くして頂きました。この場を借りてお礼を申し上げます(名前順)。本当にすごく良く対応して頂いたので、転職を考えている方はお話を聞きに行くのがオススメです!

  • 株式会社永和システムマネジメント様
  • 株式会社スタディスト様
  • ラクスル株式会社様

Step-to-Rails-Expert.rb第15回を開催しました

1/29(月)にStep-to-Rails-Expert.rb第15回をSpeeeさんで開催しました。

step-to-rails-expert-rb.connpass.com

流れ

今回はレビュー会でした。

当日の流れは

  • 自己紹介
  • 会の概要説明
  • レビュー会
  • 懇親会

という形で進めました。

会の様子

今回は2人のレビューを行いました。

PRのURLは以下になります。レビューの内容については、以下を見て頂ければと思います。

個人的に印象に残ったのは、ActiveStorageを使ったアプリのソースを見られたことです。シンプルなユースケースでは非常に簡便に実装でき、便利そうだという印象が残りました。ExpertTodoのような企画を使って、プレイグラウンドのアプリとして色々試す場にしてうまく使ってくれるのは主催者としても非常に嬉しいです。また、多数の人にレビューされると「考えていなかったことも聞けるので嬉しい」と感想を頂き、こちらも非常に嬉しかったです。 他にも何とか動く形にしてアプリを持ってきてくれましたが、最後に触ったのが3ヶ月前で全然覚えてなかった、という人や、pushするとやたら重いと思ったらvendor/bundle配下が正常にignoreされていなかったという人がいて、色々面白かったです。こういうのが笑い話になるのが個人アプリの良いところで、気軽に失敗ができます。 私の方ですが、今Vue.jsを使ってSPA化しているので、そちらを何とか次回までに形にしたいと思っています。

レビューに残らない会話や質問

  • レビュー速いけどどうやってみんな見てるんですか?

    • Githubのfilesタブのページを開いたら、hoge_controllerやmodelなど、設定ファイルではない実体のファイルまで飛んでしまう。レビュー対象になりそうなファイルから読む。
    • ルーティング → コントローラー → モデルの順で見ると良い
  • あんまり自信ない(コミット粒度とか雑だし、わかりにくいかも)けど、レビューできますか?
    主催者の回答: PRに実装した機能(仕様)を書いてくれれば大丈夫!最悪、その場にいるので説明してもらえれば良いし、中級者がステップアップする勉強会なので、進んで失敗してください。仕事で失敗するとヤバイので、こういう場をうまく使って欲しいです笑 最初は緊張すると思いますが、一歩踏み出すと慣れてきますし得るものも多いので、ぜひ一歩踏み出して下さい。

その他、便利な何かについて

次の仕様について

現在の最新の仕様を、誰も実装できていないので今回は追加なしです・・・

もくもく会 → レビュー会のサイクルについて

もくもく会 → レビュー会のサイクルを基本として行っていますが、レビュー会で時間の関係でレビューできなかった方、レビュー会に都合で参加できない方がいるので、そのような方を対象にもくもく会でもレビューを行うこととします。今回アプリを作ったけど参加できなかった・・・という人がいたらもくもく会でも気にせずにレビューされに来て下さい。

次回について

次回は2/26(月)Speeeさんにて開催します。もくもく会となりますので、気軽にご参加ください。 今回アプリは作ったけど出席できなかった・・という人は持ってきて頂ければレビューしますので、ぜひ再度ご参加ください!