give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

SUUMOタウンに僕の地元、兵庫県西脇市を紹介する記事を寄稿しました

お知らせ

SUUMOタウンというメディアサイトに、『移住して14年のベテランリモートワーカーが思う「ちょうどいい田舎」兵庫県西脇市の話』という記事を寄稿しました。


f:id:JunichiIto:20201029110415p:plain

この記事では僕が住んでいる兵庫県西脇市の魅力を紹介しています。
みなさん、ぜひ読んでみてください・・・って言ってるのに、あっ、スルーしないで!!😭

いやあ、この記事、めちゃくちゃ書くのが大変だったんです。
最初この話を受けたときは「文章書くのは得意だし、テーマは最初から決まってるし、ぱぱっと書けるっしょ」と高をくくってたんですが、いざ書こうとすると「え、具体的に何書けばいいん??」と筆が止まってしまい、内容を考えるのにめちゃくちゃ時間がかかりました。

ようやく骨子が決まって書き始めたら、今度は大幅に字数をオーバーしてしまい、編集Nさんの協力を得ながら可能な限り内容を圧縮しました。(それでもまだ長いけど・・・)

そんなこんなで先月末からついこの間まで、この記事の執筆やら推敲やらに時間をかけまくってしまいました。
この1ヶ月ぐらいブログの更新がほとんどなかったのは実はこの影響です、はい。

っていうぐらい、汗水垂らしながら書いた記事なので、ぜひ一度目を通していただきたいなーと思います。
みなさんどうぞよろしくお願いします🙇‍♂️

おまけ

記事の中では西脇とその他の都市の人口密度を比較する、こんな図が登場しています。

f:id:JunichiIto:20201004195335j:plain

最初はExcel方眼紙に手でプチプチと絵文字を打ち込んでいってたのですが、思いのほか面倒だったので、こんなRubyスクリプトを書いて人口密度に応じた絵文字を出力するようにしました。

SEPARATOR = ','

def main
  counts = ARGV.map(&:to_i)
  side_length = Math.sqrt(counts.max).ceil
  counts.each do |count|
    print_faces(count, side_length)
    puts
  end
end

def print_faces(count, side_length)
  faces = '🙂' * count
  spaces = ' ' * (side_length ** 2 - faces.size)
  all_chars = [*faces.chars, *spaces.chars].shuffle

  all_chars.each_slice(side_length) do |chars|
    puts chars.join(SEPARATOR)
  end
end

main

このスクリプトを実行するとこんな結果が得られます。(絵文字の配置はランダムに変わります)

f:id:JunichiIto:20201029072047p:plain:w300
上記スクリプトの実行結果

あとはこれをExcel等に貼り付けて見た目を整えれば完成、というわけです。
いやー、Rubyって便利!

あ、Rubyのコードの意味がわからない人はこちらの本をどうぞ(宣伝)。

この図がどこに出てくるのか、SUUMOタウンに書いた記事をぜひチェックしてみてください😄

suumo.jp

謝辞

記事のネタ出しに協力してくれた妻と、西脇に移住するきっかけを作ってくれた子どもたちと、僕の細かい修正依頼に気前よく応えてくれた編集Nさんに感謝します。
みなさん、どうもありがとうございました!

プログラミング初心者は変数名やメソッド名を略さない方がいいよ、という話

今回のエントリでは先日、僕が勤めているソニックガーデンで話題になったプログラミング関連の小ネタを書きます。
それは何かというと、「プログラミング初心者は変数名やメソッド名を略さない方がいい」という話です。

長い変数名やメソッド名はつい略したくなります。
実際、僕も長い名前を略すときはよくあります。
ですが、略称を使うのは長年の経験から「この略称は一般的だから誤解を招くことはきっと少ないだろう」とか「前後の文脈から、変数の中身は誰が見ても明らかだろう」という想像が付いた場合だけです。

一方、プログラミング初心者の人は経験が浅いため、「一般的かどうか」とか、「誤解が発生しないかどうか」といった判断ができません。
そのため、他の人が見たときに「え、何この変数名?」と思ってしまうような略称を付けてしまう恐れがあります。

たとえば、先日のコードレビューで、初心者の人がrev_noという名前の変数を定義していました。
この変数名を見て、みなさんは何が格納される変数かわかりますか?
僕は「revison_numberの略かな?」と思いました。
でも、初心者の人に聞いたら、「それはreverse_number(逆順の数字)の略だ」という答えが返ってきました。
はい、しっかり誤解が発生してますね!!

ですから、プログラミング初心者の人は変数名やメソッド名を略さないようにしましょう。
略すのは先輩プログラマからOKをもらったときだけにしてください。

さきほどの例ならrev_noではなく、reverse_numberと略さずに書くべきです。
(正確にはreversedのように過去分詞形にしたいところですが)

ちょっと厳しいルールかもしれませんが、初心者のうちは変な悪い癖が付いてしまうことを避ける方が重要なので、こういったルールには意味があると思います。

追記:「でも長い名前は入力するのが大変なんです!」という方へ

長い名前を略したい一番の動機は、「タイピング量を減らしたいから」だと思います。
この点についてはエディタやIDEの機能を活用しましょう。

たとえば、VimであればCtrl-NやCtrl-Pでバッファ内に表示されている文字列を自動補完することができます。

Visual Studio Code(VS Code)やRubyMineなどのIDEでも、途中まで変数名をタイプすると変数やメソッドの候補を表示してくれます。

ですので、「タイプ量を減らしたいから、名前を略す」のではなく、「タイプ量を減らすためにエディタやIDEの操作を勉強する」と考えるようにしましょう。
その方がずっと生産的です!

追記2:reverse_noならOKですか?

reverse_numberではなく、reverse_noならOKか?」という点についても議論してみましょう。
たしかに"number"を"no"と略すのはプログラミングに限らず、日常生活でもよく見かけるので、一般的な略称と言えるかもしれません。
ですが、以下の点で"no"は"number"よりも問題が起きやすい名前だと僕は考えます。

  • "yes/no"の"no"と混同しやすい
  • 配列に格納する場合などに複数形を使おうとすると"nos"や"noes"になるが(参考)、複数形になると急に馴染みが薄くなる("no"の複数形であることがぱっと理解しづらい)

よって、何か特別な理由がない限り、"no"ではなく"number"を使う方が望ましいと考えます。

追記3:略していいケースってどんなケース?

上の本文で「実際、僕も長い名前を略すときはよくあります」と書きましたが、具体例がないとイメージが沸きにくいと思うので例をいくつか挙げておきます。

たとえば、以下のような単語は他のコードでも省略形をよく見かけるので、省略して書く場合があります。

  • execute = exec
  • initialize = init
  • calculate = calc
  • character = char
  • arguments = args

寿命が短いローカル変数や仮引数に対しては以下のような名前を付ける場合があります。

  • average = avg
  • maximum / minimum = max / min
  • message = msg
  • exception = e または ex
  • event = e

単純なループの変数に対しては以下のような略称を付けることがあります。

  • 文字列の場合 = s または str(stringの略)
  • 文字の場合 = c(characterの略)
  • 数値の場合 = i(integerの略)または n(numberの略)
  • ファイルオブジェクトの場合 = f (fileの略)
# ループの変数名をiとする場合のコード例
[1, 2, 3].map do |i|
  i * 10
end

寿命が極めて短い変数に対してはクラス名の頭文字を使う場合があります。

# Userクラスのインスタンスを配列に格納
users = User.all

# ブロック内の変数の寿命が極めて短いので、名前をuとする
users.map { |u| u.name.upcase }

ですが、寿命がそれなり長い場合は略さずに書きます。

# 寿命がそれなりに長いので略さずにuserとする
users.map do |user|
  books = find_books(user)
  cars = find_cars(user)
  "#{user.name} has #{books.size} books and #{cars.size} cars"
end

なお、母音を引っこ抜いたようなオレオレルールな略称はわかりづらくなるだけなので、絶対に使いません。

# こんな略称は絶対書かない
gbsn_gtrs = Guitar.brand('gibson')
fndr_gtrs = Guitar.brand('fender')

# 変数名は略さずに書きます
gibson_guitars = Guitar.brand('gibson')
fender_guitars = Guitar.brand('fender')

他にも略称を使うパターン、使わないパターンがあるかもしれませんが、ぱっと思いつくのはこんな感じです。

追記4:無味無臭な名前も避ける

略称とはちょっと異なりますが、こういう変数名もダメな部類に入ります。

  • data
  • info
  • item
  • element
  • obj
  • array (ary, arr)
  • list


こういう変数名を僕は「無味無臭な名前」と呼んでます。
プログラムに出てくる変数は全て何らかのデータなので、dataなんて名前を付けてないの同じです(他の変数名も同様)。
中身が想像できる名前を付けるようにしましょう。

より詳しい説明と具体的な改善方法は、こちらのブログを読むと参考になります(ちょっと言い方が激しいですが😅)。

data とか info とか list とか item とかいう変数名止めろ - Neo's World

20年近くプログラミングをやってても、命名にはすごく時間がかかります。
熟練者でも時間がかかるんだから、プログラミング初心者が横着して雑な名前を付けてはいけないのはなおさらです!

ケルヒャーの延長パイプを使って、家の壁をきれいにしてみた

築12年の我が家、南側の壁は何もしなくてもきれいなままなんですが・・・

f:id:JunichiIto:20200921043725j:plain

日が当たらない北側の壁(2階の窓の周りとか)はだんだんと黒ずんできました😢

f:id:JunichiIto:20200921043913j:plain

1階の汚れは脚立等を使って掃除ができそうなものの、2階の汚れはどうやってきれいにすればいいのかわかりません。

親戚のおばちゃんに話したら「ハウスメーカーに頼んだら壁の掃除してくれるらしいで〜」と言われたので担当の人に電話したんですが、「足場を組んだら最低でも20万はかかりますね😑」と言われ、「えー、20万はちょっと・・・」となってしまいました。

でもどうしてもきれいにしたい!!と妻が熱望するので、いろいろ作戦を考えました。
そこでふと思ったのが、「ケルヒャーに何か高所作業用のオプションがあったりしないかな?」ということです。(注:我が家は以前からケルヒャーは持っています)

調べてみました。

ありました!!「ケルヒャー 延長パイプ 4m」!!

ケルヒャー 延長パイプ 4m 2642-347

ケルヒャー 延長パイプ 4m 2642-347

  • メディア: 道具 & 工具

これを使えば、ほら!!(写真はイメージです)

f:id:JunichiIto:20200921045320j:plain:w300
Image: https://www.amazon.co.jp/gp/product/B004U7EHCQ/

これはすごく使えそう!

ですが、1つだけ邪魔なものがあります。
我が家と妻のパン屋の間にある雨よけの屋根です。

f:id:JunichiIto:20200921045726j:plain:w350

これがあると下から上に向かってパイプを伸ばすことができません。うーん、困った。

考えました。

ひらめきました!!
「パン屋の屋根にのぼって作業すればええやん!!」

つまり、こうです。(写真はイメージです)

f:id:JunichiIto:20200921050255j:plain

屋根の上はこんなふうに平らになってるので、落ちないように気を付けさえすれば作業はできそうです。

f:id:JunichiIto:20200921050433j:plain

というわけで、近所のホームセンターでハシゴ(脚立兼用のもの)を買ってきました。

Amazonからケルヒャー 延長パイプも届きました。

f:id:JunichiIto:20200921051831j:plain:w300

よし、これで準備万端!!壁をきれいにするぞー!!

うりゃー!!

f:id:JunichiIto:20200921052354j:plain:w350

よーし、屋根にも上っちゃうぞー!(安全のためにヘルメット装着)

f:id:JunichiIto:20200921062222j:plain:w350

無事に上れました。(まぶしいのでグラサンも付けてます)

f:id:JunichiIto:20200921062612j:plain

作業開始!

f:id:JunichiIto:20200921062826j:plain

Before→Afterです。
まだうっすら汚れは残っていますが、ぱっと見は気にならないレベルになりました✨

f:id:JunichiIto:20200921065015j:plainf:id:JunichiIto:20200921065010j:plain

ついでに予定になかった妻のパン屋の壁も掃除することにしました。

f:id:JunichiIto:20200921064335j:plain:w350

こうやってみると全然色が違いますね!!(てか、掃除する前が汚れすぎ・・・)

f:id:JunichiIto:20200921064551j:plain

パン屋の壁もきれいになりました✨

f:id:JunichiIto:20200921064811j:plain

これで我が家の壁のお掃除は完了です。
汚れが落ちて気持ちいい〜!!

ケルヒャー前👇

f:id:JunichiIto:20200921043913j:plain

ケルヒャー後👇

f:id:JunichiIto:20200922090544j:plain

おさらい:今回のお掃除で使ったもの

ケルヒャー本体です。これは前から家にありました。

延長パイプ 4mです。Amazonで1万8000円ぐらいで購入しました。

ケルヒャー 延長パイプ 4m 2642-347

ケルヒャー 延長パイプ 4m 2642-347

  • メディア: 道具 & 工具

はしご兼用脚立です。近くのホームセンターで1万5000円ぐらいで購入しました。

延長パイプとはしごを合わせると3万3000円ぐらいかかっていますが、それでもハウスメーカーから提示された「最低でも20万円」に比べるとはるかに安い費用で壁を綺麗にすることができました!しかも今回購入したツール類は今後も使えますし。

ちなみに、作業時にかぶっていたヘルメットは中学生の息子が使っている通学用ヘルメットなので、今回コストはかかっていませんw😆

f:id:JunichiIto:20200921070720j:plain:w250
はしごの角度を確認中...(75度が一番安全らしい)

Tips:筋肉痛を避けるコツ?

Amazonのレビューを見てると、「延長パイプが重いので筋肉痛になった」みたいなコメントがいくつかありました。
たしかに腕の力だけで上下させようとすると筋肉痛になりそうです。

作業用のベルトをしっかり肩にかけ、腕の力よりも膝を使ったりして身体全体で延長パイプを動かすようにすると、腕が筋肉痛になるのを避けられます。
あと、2階の屋根付近はそのままだと腕を伸ばしても届かないので、脚立などを使ってそこまで手を伸ばさずに作業できるようにした方がいいと思います。(ただし脚立から落ちると危ないので、そこも無理しないように!)

これで僕は筋肉痛にならずに済みました。

まとめ

というわけで、このエントリではケルヒャーと延長パイプを使った自宅の壁のお掃除について書いてみました。
ケルヒャー、購入したのはかなり前ですが、割とよく使いますし、気持ちよく汚れが落ちるのでかなりの優れものです。

水が勢いよく噴き出して汚れがみるみるうちに落ちるのは、水鉄砲で遊ぶ子どものような気持ちになれて、純粋に楽しいです。
UX的にもとても優秀なツールだと思います(笑)。

真夏や真冬は外で作業するのが辛いので、涼しくなってきた今がチャンスだと思います!
家の周りの汚れが気になる人はぜひ参考にしてみてください😄

おまけ:ケルヒャーのデッキブラシもあります

ケルヒャーといえば、先日こんなものも買いました。

これを使うとケルヒャーがデッキブラシになります。(写真はイメージです)

f:id:JunichiIto:20200921072833j:plain
Image: https://www.amazon.co.jp/dp/B00BKVF2I8

先日はこれを使って風呂場の床や、玄関タイルをきれいにしました。
水が四方八方に飛び散らないので、これはこれでとっても便利です。

こんな感じで使えま〜す↓

PR:妻のパン屋のホームページです

本文にもちらっと出てきましたが、妻は兵庫県西脇市でクープ バゲット(Coupé Baguette)という小さなパン屋さんをやってます。
マイナーな田舎町なのであまり立ち寄る機会もないと思いますが(しかも営業日は金土の週2日だけ)、もし何かの機会があればどうぞ〜🍞

coupe-baguette.com