ESM アジャイル事業部 開発者ブログ

永和システムマネジメント アジャイル事業部の開発者ブログです。

Rails / OSS パッチ会オンライン 2021年12月のお知らせ

【重要】Rails/OSS パッチ会で運用していた Idobata ルームは閉鎖されました。本記事で言及している Discord へ引越しをお願いします。

2021年12月の Rails / OSS パッチ会を 12月21日(火)に Discord でのオンライン開催をします。

この会をひとことでいうと、日頃のお仕事で使っている Rails をはじめとする OSS について、upstream にパッチを送る会です。

会には Ruby と Rails のコミッターである顧問の a_matsuda もいますので、例えば Rails に送るパッチのネタがあるけれど、パッチを送るに適しているかの判断やパッチを送る流れが悩ましいときなど a_matsuda に相談して足がかりにするなどできます。

開催時間は 17:00-19:00 となりますがご都合のあう方はぜひご参加下さい。

Discord の Rails/OSS パッチ会サーバーへの招待 URL は以下です👇

discord.gg

パッチ会では、先日リリースされた Rails 7.0 や、クリスマスにリリース予定されている Ruby 3.1 に関する話題などあるかもしれません。

これからパッチ会に参加してみようという方や、24 Pull Requests の活動機会にできそうな方も、ぜひどうぞ。Discord でお会いしましょう。


永和システムマネジメントでは、Ruby とアジャイルソフトウェア開発を通じてコミュニティと成長したいエンジニアを絶賛募集しています。

agile.esm.co.jp

red-datasets の使い方と利用できるデータセットを調べてみた

この記事は、ESM Advent Calendar 2021 10日目の記事です。

adventar.org

はじめに

こんにちは、@wai_doi です。

今年開催された RubyKaigi Takeout 2021 で、@kou さんの 「Red Arrow - Ruby and Apache Arrow」 発表がありました。

rubykaigi.org

こちらの発表の中で、@kouさんが開発された red-data-tools/red-datasets という Gem が紹介されていました。

github.com

簡単に様々なジャンルのデータセットを Ruby から利用できる Gem です。発表中のデモでは、日本の郵便番号のデータセットをRubyで簡単に利用できており、すごく便利な Gem だなと感じました。そこで、郵便番号データの他にどのようなデータセットが red-datasets から利用できるのか気になったため、調べてみることにしました。

red-datasets の使い方

まずどのように利用するか確認します。

Gem をインストールします。このブログ執筆時点では v0.14 が最新です。

gem install red-datasets

次に実際に使ってみます。各データセットのクラスが Dataset クラスを継承しているため、同じ参照方法となっています。

例として、郵便番号データの Datasets::PostalCodeJapan を使ってみます。

クラスが enumerable を include しており、each メソッドを呼び出すと、インターネット上のオープンデータをzipなどでダウンロードする処理が行われます。

first を呼んで内部で each を呼ぶこともできます。

require "datasets"

dataset = Datasets::PostalCodeJapan.new

dataset.first # ここでダウンロード処理が入る

#=>
<struct Datasets::PostalCodeJapan::Record
 organization_code="01101",
 old_postal_code="060",
 postal_code="0600000",
 prefecture_reading="ホッカイドウ",
 city_reading="サッポロシチュウオウク",
 address_reading="イカニケイサイガナイバアイ",
 prefecture="北海道",
 city="札幌市中央区",
 address="以下に掲載がない場合",
 have_multiple_postal_codes=false,
 have_address_number_per_koaza=false,
 have_chome=false,
 postal_code_is_shared=false,
 changed=false,
 change_reason=nil>

どのデータセットのクラスも同じように利用できます。ただし、new メソッドに引数を必要とするものもあります。

ダウンロード先について

ダウンロード処理が走ると、ローカルにデータセットがダウンロードされます。例えば MacOS の場合、~/Library/Caches/red-datasets/ 以下に保存されます。

Dataset.clear_cache! を実行すると、ローカルにダウンロードしたファイルを消すことができます。

https://github.com/red-data-tools/red-datasets/blob/0.1.4/lib/datasets/dataset.rb

データセットの種類

red-datasets で利用できるデータセットは、機械学習に用いるデータセットとそれ以外に大まかに分けることができることがわかりました。

Datasetクラスを継承しているクラスを分類して列挙してみました。

機械学習で用いるデータセット

  • Datasets::Adult
  • Datasets::CIFAR
  • Datasets::Communities
  • Datasets::FashionMNIST
  • Datasets::Hepatities
  • Datasets::Iris
  • Datasets::LIBSVM
  • Datasets::MNIST
  • Datasets::Mushroom
  • Datasets::Penguins
  • Datasets::Rdatasets
  • Datasets::Seaborn
  • Datasets::Wine

それ以外のデータセット

  • Datasets::CLDRPlurals
  • Datasets::EStatJapan::StatsData
  • Datasets::PennTreebank
  • Datasets::PostalCodeJapan
  • Datasets::SudachiSynonymDictionary
  • Datasets::Wikipedia

この中から特に気になった 5 つのデータセットを紹介します。

Datasets::CLDRPlurals

英語や日本語などの言語ごとの、数の表し方のルール集のようなものです。 例えば英語だと、複数系になると末尾に s が付くことや、序数は 1st、2nd、3rd、4th..と表すことがルールとして書かれています。

unicode-org.github.io

Datasets::EStatJapan::StatsData

e-Stat という日本の統計データのサイトからデータを取ってきています。都市の人口など取得することができます。

www.e-stat.go.jp

内部では e-Stat の API を叩いています。 new に引数を渡す必要があるため、ドキュメント見るのがよいです。

https://www.rubydoc.info/gems/red-datasets/Datasets/EStatJapan/StatsData

Datasets::PostalCodeJapan

日本郵便が公開している、日本の郵便番号データです。

www.post.japanpost.jp

過去に仕事でこのデータをダウンロードして使ったことがあったため、意外と利用されるデータセットなのかなと思いました。

Datasets::SudachiSynonymDictionary

Sudachi という日本語形態素解析器で使われている同義語辞書です。自然言語処理で使えそうなデータだなと思いました。

github.com

Datasets::Wikipedia

言語を指定して、その言語のウィキペディアページをダンプすることができます。 ただしダウンロード処理にすごく時間がかかるため自分は途中で諦めました...。

dumps.wikimedia.org

まとめ

red-datasets の使い方と利用できるデータセットを調べてみました。 自分の知らなかったデータセットがいろいろあるため興味深かったです。どこかで利用できる機会があれば使ってみたいなと思いました。


最後に、株式会社永和システムマネジメントでは、Ruby とアジャイルソフトウェア開発を通じてコミュニティと共生しながら成長したいエンジニアを絶賛募集しています。

agile.esm.co.jp

自作キーボードの魅力と PRK Firmware

こんにちは、@kasumi8pon です。

この記事は、PRK Firmware Advent Calendar 2021ESM Advent Calendar 2021 9日目の記事です。

わたしが感じている自作キーボードの魅力

わたしは昨年の 9 月に初めて自作キーボードの組み立てをして、今メインでつかっているこちらのキーボードはもう 1 年以上使っています。

f:id:kasumi8pon:20211207141618j:plain
my keyboard
そんなわたしが感じている自作キーボードの魅力をお伝えします。(初級者のわたしがまだ味わっていない魅力は他にもたくさんありそうです。光らせるとか、1 から自分で設計できるとか……)

自分に合う形が選べる

自作キーボードの形はとても種類が豊富です。市販のキーボードと同じような形もありますし、わたしがそれまで見たことがないような形のものもありました。例えば、キーが格子型に配置されているものや、キー数が少ないものなど、たくさんの種類から自分の好きな形が選べることは大きな魅力です。写真は ErgoDash mini というキーボードです。数字の段のキーがなくてコンパクトなので手を大きく移動させなくてもキーが打ちやすいところや、親指で押せるキーが多いところが気に入っています。また、分割型ということで自然な姿勢でキーボードを使えるので、肩が凝りにくい気がします。

好きなキーキャップを選んでつけられる

見た目は大事です。メインは astrolokeys というキーキャップをつけています。とても可愛くて気分が上がります。 左上につけているのは Zen Pond III というキーキャップです。とても美しいです。

押しごこちを追求できる

キーを押したときの感触も自分好みにすることができます。 初めはあまり興味がなかったのに、いざ自分でキーボードを組み立てよう!と思い立つと「せっかくなので」と押しごこちもこだわりたくなってしまいました。写真のキーボードには Input Club Hako Violet というキースイッチを使っています。 比較的な軽めなキースイッチですが、キーを押したと判定される反応点の手前にある触感のピークはしっかりしていて「押した感」もあるところが気に入っています。

自分でキーマップを設定できる

自作キーボードはキーマップを自分で書き込むので好きなように設定ができます。よく使うキーを押しやすいところに配置したり、タップ時とホールド時で別の入力を設定したりするなど、無限に調整ができます。

ここまで語ってきましたが、実はキーマップの利点について、わたしはあまり活用できていませんでした。 最初に自分好みに設定したつもりでも、使っていくうちにちょっと違うな、調整したいなと感じることが何度かありました。ここでキーマップを育てていけるのも良いところなのに、実際にはあまり変更をしていません。 なぜなら、すこし手間がかかるためです。 今メインで使っているキーボードは QMK Firmware というファームウェアで動かしており、ビルドにいくつかの手順と時間が必要です。大したことはない手順ですが、現在のキーマップでも問題なく利用できることと、わたし自信の面倒くさがりという性質からどうも後回しにしてしまい、キーマップをいじることがあまりなくなってしまいました。 そして、すでに組み立てたキーボードは気に入っているけれど、新しい自作キーボードを組み立てたり、もっとカスタマイズしていこうという気持ちはしぼんでしまっていました。

PRK Firmware との出会い

それからしばらく時が経ち、今年の 9 月 RubyKaigi Takeout 2021 での hasumikin さんの PRK Firmware: Keyboard is Essentially Ruby トークを聞きました。Ruby でキーマップを書けるファームウェア PRK Firmware についての話です。 トーク内でいくつかのデモが行われてどれもすごく面白かった中で、わたしが一番感動したのは「PRK Firmware を使うと、コンパイルする必要がない」というところです。 すごい!!! PRK Firmware を使うとキーボード内の keymap.rb というファイルを直接編集することでキーマップを設定できて、すぐにその変更が反映されるのです。キーマップを変更して使ってみて、もし思っていたのと違ったらすぐに微調整して再度試すということがとても手軽にできるんですね。 これがわたしの中で小さくなってきていた自作キーボードの火を再び起こしてくれました。ぜひ PRK Firmware を使って、自分のキーボードをもっとカスタマイズしていきたい!と。

ということで、トーク内のデモでも使われていた meishi2 というキーが 4 つの小さなキーボードを PRK Firmware を使って動かしてみました。meishi2 は元々 QMK Firmware で動いていたため、Pro Micro を付け替えて、ダウンロードしてきたバイナリをドラック&ドロップして、keymap.rb という Ruby のファイルを配置するだけで動きました。自作キーボードが初めての方でも、かなり簡単に入門できると思います! (実はそれだけのところでずいぶん詰まって、ruby-jp の #keyboard チャンネルでみなさまに助けていただきました。なんと、Pro Micro をつける向きを間違えていたという凡ミス……。画像の通り付ければ間違いないです!)

ふつうの文字を割り当てることもできますが、Ruby のコードを書けるので、試しに押すとランダムなフルーツ(など)の絵文字が出てくるキーをつくってみました。 🍒 🍇 🍓 🍒 🍍 🥑 🍋 🍋 🍐 🥝 🥒 🥔 🍇 🥬 🍉 🍋 🍍 🍑 🥜 🍋 🥜 🍎 押すのが楽しいです。キーボードの中に cherries とか grapes の文字列を持っておいて、ランダムに選んでコロンと一緒に出力しているだけです。(わたしの利用しているエディタやサービスは大体絵文字に変換してくれる。)このキーにフルーツの絵柄のキーキャップをつけたら面白そう、などと想像がふくらみます。このキーはちょっとした思いつきでしたが、何かアイデアが思い浮かんだらいつものようにコードを書くことで気軽にメンテナンスできるので、これからもいろんなカスタマイズをしていこうと思います。

最後に、『達人プログラマー 職人から名匠への道』からの引用です。

道具を手に入れた後は、その学習と適合段階が始まります。それぞれの道具 には独自の個性やくせがあり、道具ごとに固有の取り扱いが必要となります。 また、それぞれの道具を独自の方法で研ぎ上げ、維持していく必要もあります。

道具は手に入れて終わりではなく、研ぎ上げて自分にあわせていく過程が必要です。普段 Ruby を書いているわたしにとって、 PRK Firmware で動くキーボードはとても研ぎ上げるのが楽しい道具になりそうです。

まとめ

  • 自作キーボードは楽しい!

  • PRK Firmware ならそんな楽しい自作キーボードをもっと気軽に始められそう!

  • keymap.rb をメンテナンスしながら道具を磨いて、効率的に・楽しく作業をしよう!

集中する技術

こんにちは。@color_box です。

この記事は、ESM Advent Calender 2021 の8日目の記事です。

みなさん集中できてますか?

ついついTwitterとか見てませんか? 私は見ちゃいます。

この記事では私が集中する時に気が散るのを防ぐためにやっていることを紹介します。

/etc/hostsを書き換えてtwitterなどへのアクセスを遮断する

手始めに/etc/hostsを書き換えましょう。 私は下記のように書き換えて運用しています。

0.0.0.0 www.youtube.com
0.0.0.0 abs.twimg.com
0.0.0.0 twitter.com
0.0.0.0 tweetdeck.twitter.com
0.0.0.0 www.tumblr.com
0.0.0.0 www.facebook.com

StayFocusdを使う

chrome.google.com

Chromeユーザー限定ですが、こちらの拡張機能を使用すると、特定サイトのアクセスを1日10分などに制限できます。

UnDistractedを使う

chrome.google.com

こちらもChromeユーザー限定の拡張機能ですが、使用することで特定サイトのアクセスを遮断できます。

ツイートしたいときは専用ソフトを使う

ツイートはしたいけど、Twitterは見たくないって時ありますよね?私はあります。

そういうときはツイートに特化したアプリを使いましょう。 ツイートしかできないようなアプリであれば完璧です。 私はそんなアプリを作ってローカルで運用しています。

github.com


今回、私が集中したい時にやっていることを紹介しました。

今回紹介した制限は、その気になれば自分ではずせるものばかりで、完全に防止できるわけではありません。 しかし、こういった制限があることで、脇道にそれづらくなります、それづらくなると本来やりたい作業に集中しやすくなる、という寸法です。

この記事が集中したいどなたかのお役に立てば幸いです。

After "Hello, World!"、何書いてますか?

こんにちは。@junk0612 です。

この記事は、ESM Advent Calender 2021 の4日目の記事です。

前置き

12月、師走になりました。界隈ではアドベントカレンダーが盛り上がり、世間では様々な場所でイルミネーションが行われ、友人と「もう12月かよ、今年あれもこれもできんかったわ〜」と無駄話する、そんな季節です。

来年の話をすると鬼が笑うと言いますが、来年の言語はすでにお決まりですか? 僕は Rust 面白そうとか TypeScript ちゃんと触っておきたいとかアセンブリなんていいんじゃないのとかいろいろ考えてしまってなかなか決まりません。年明けまでに決めておかないと……

本題

前置きがだいぶ長くなりました。

新しい言語を学んでいて、アプリやゲームを作るほどまだ手に馴染んでいないけど、Hello, World! じゃないもうちょっと難しいプログラムを書きたくなったとき、皆さんは何を書きますか?

僕は再帰下降パーサが好きなので、「四則演算の式を再帰下降で構文解析するパーサ」をよく書きます。Ruby で書いたコードの Gist です。 https://gist.github.com/junk0612/b79d080a5c4a6c34efc85dc56b63b29e

この問題の気に入っているところは、ゴールを自分である程度調整できるところです。四則演算でゴールして作りたいアプリの作業に移ってもいいですし、改良できるところはいろいろあるので、気分が乗ったらそれに手を付けても構いません。

実はこの話題、たまたま Twitter でみかけて (どこだったか失念しましたが……)、JSON のパーサを書いているとか、言語特性を考えてその都度書くものを変えているとか話していて、みんな意外と違っていて面白いなと思ったのでした。

どんな物を書いているか、Twitter などで反応をもらえると嬉しいです (さらに書いたものを GitHub にまとめてこちらからご応募いただけると泣いて喜びます)。

ソフトウェア受託会社の営業がお客様へ最初に質問すること(あるいは、永和システムマネジメントアジャイル事業部にお仕事を依頼されたいときにご一読いただきたいこと)

この記事は「ESM Advent Calendar 2021」の2日目の記事です。

adventar.org

こんにちは、平田です。アジャイル事業部の Ruby x Agile グループにお仕事の依頼をいただいた時には、ほとんどすべての場合に、私が最初に話を聞かせていただいています。

同業他社の方から「トークスクリプトまとめてるんですか?」と聞かれたこともあるのですが、お客様によって状況も異なることもあり、あまりきちんとまとめてはいません。ものづくりをやっていくにあたり気になる点を都度確認しているのですが、でもよく聞くものは似通っているなと思い、少しまとめてみました。

開発しているサービスについての質問

  • 対象のサービス名
  • サービスのビジネスモデル
  • 現在のお客様の状況(BtoBの場合大口顧客の状況や、BtoCの場合ユーザー数の伸び等)

開発対象の技術的な状況

  • 現在のフェーズ(ローンチ前なのか、ローンチからどれだけ経過しているのか)
  • 規模(どのくらいの期間、何人で開発してきたのか。bin/rails statsの結果を聞くこともあります)
  • 使用している技術スタック(新規開発の場合には技術選択の制約)
  • 困っていることがあればその状況

開発しているチームがいる場合、その状況

  • 現在の体制
  • リリース間隔を含めた開発プロセス

今回依頼したい内容

  • どのような課題を解決したいのか
  • 技術的な課題はなにか
  • チームビルディングや開発プロセスの課題はなにか

(主に初めての方の場合)一緒にやれるかの文化の確認

  • どのようなルートで弊社を知ったのか
  • 他に声をかけている会社様について

お取引に関する確認

  • 費用感
  • 希望開始時期
  • 最遅開始時期(いつまでお待ちいただけるか)
  • リリース等のマイルストーン

新規のサービスや社内システムの開発の場合、もう少し対象領域に踏み込んだ質問をさせていただきますし、エンジニアが同席して詳細な技術的な課題をお聞きすることもありますので、最低限のものですが、このようなことをお聞きします。

もし、ソフトウェア開発の外部委託(一部でも全部でも)を検討されている場合には、このようなことを確認されるということを心に留めていただき、下記のリンクよりお問い合わせください!

agile.esm.co.jp

また、永和システムマネジメントアジャイル事業部では、様々なお客様の課題解決のお手伝いをしたいと考えているエンジニアの方を募集しています。ご興味のある方は以下のリンクより事業部の紹介をご覧いただき、カジュアル面談のご連絡をください!

agile.esm.co.jp