nakaoka3の技術ブログ

2023年中に52本なにか書きます

広島駅前でお好み焼きが食べたいときは

広島市では流川などの繁華街は広島駅から少し離れた場所にあります。駅前にも大きな商業ビルは建っていますが、飲み屋や飯屋が多い繁華街までは路面電車やバスで移動する必要があります。

私が新幹線の出発前に広島駅前でお好み焼きを食べたいときは、広島駅南口の郵便局の隣にあるお好み焼き屋「ゆうゆう」に行きます。

高校生の時によく行っていた店です。正確にはよく行っていたのは近くにあった同じ名前の別店舗のほうですが、いつの間にかなくなっていました。

記憶違いでなければ、20年前は400円で1枚のお好み焼きを食べることはできました。通常料金は500円で、高校生や浪人生は100円引きでした。流石にいまは700円程度に値上げしています。

なぜこんな話を書いているのかというと、週末に YAPC::Hirosima 2024 というソフトウェアエンジニアが集まるイベントがあり、県外から多くのエンジニアが参加するからです。広島駅前だと意外にちゃんとしたお好み焼きを食べれる店を見つけるのが大変かもしれません。駅前ならゆうゆうが個人的におすすめです。

カウンター席だけではなくテーブル席もありますが、大人数で行くと入れないかもしれないので注意です。

注文するときは「肉玉そば」といえばスタンダードなお好み焼きが食べられます。「肉玉うどん」というのが麺がうどんのお好み焼きです。肉玉そばがおすすめですが、肉玉うどんは地域であんまり見ないので試してみてもいいかもしれません。

ゆうゆうのお好み焼

お好み焼きの写真を見たらビールを飲みたくなってきました。

呉の好きな食べ物(メロンパンのナナパン/エーデルワイスのクリームパイ)

メロンパンのナナパン

「メロンパン」という名前のパン屋だ。しっとりとしたパンにチョコが挟まっていて、子供の頃から好きだった。

「メロンパン」にもメロンパンは売っているが、おそらく多くの人が思い浮かべるメロンパンではない。中には白あん(?)がずっしりつまっていている。中身が甘すぎるのでメロンパンのメロンパンはあまり好きではない。

ナナパンは中身が重くないので、ちょうどいい。長い間食べてないので、久しぶりに食べてみたい。

ところでこのメロンパンのメロンパンのせいで、中学生くらいまでメロンパンの概念があやふやだった。他の地域の人間からしたらわけがわからないと思うが、メロンパン/コッペパンサンライズという言葉が指すものがローカルのパン屋・給食・コンビニなどの全国チェーンでバラバラだったりする。さすがに現代ではある程度統一されているのだろうか。現役の呉市民の小学生あたりに聞いてみたい。

melonpan.shop

エーデルワイスのクリームパイ

生クリームとカスタードクリームのみのシンプルなクリームパイ。クリームたっぷりの見た目に反して、重すぎることはなく、サクッと食べられる。すっきりと爽やかな味だった記憶がある。

大人になって色んなケーキを口にしたと思うが、今でもこのクリームパイは好き。思い出補正かもしれないが、ここまで美味しいクリームパイは他で食べた記憶はない。 www.ownerchef-sweets.com

年末なので今年使ったプログラミング言語を振り返り、最新バージョンの様子をチラ見する(2)

年末なので今年使ったプログラミング言語を振り返り、最新バージョンの様子をチラ見するの続き。スマートフォンアプリの開発ではKotlinやSwiftを触っていた。

Kotlin

Androidアプリの開発で触った。思い返してみればKotlinよりも、Javaのほうが多かったような気もする。

  • 現在の最新バージョン 1.9.22
  • 2023年初の時点での最新バージョンは1.8.0

kotlinlang.org

1.9 の変更点を見ると、enum の entries 関数、新しい ..< 演算子などの変更が含まれる。K2コンパイラの話は影響が大きそうなので気になる。KotlinがNativeやJSやWASMでも実用的に使えるようになったら面白そうだ。

1.9の次のバージョンは2.0らしい。来年のKotlinに期待。

blog.jetbrains.com

Swift

iOSアプリの開発で触った。

  • 現在の最新バージョン 5.9.2
  • 2023年初の時点での最新バージョンは5.8

www.swift.org

メモリ管理に関する新しい機能である ownership 所有権 が追加された。

KotlinもSwiftも、最新情報を全然追っていないということがわかったので、定期的に見ていきたい。

年末なので今年使ったプログラミング言語を振り返り、最新バージョンの様子をチラ見する

年末なので今年使ったプログラミング言語を振り返り、最新バージョンの様子をチラ見した。

Perl

仕事でwebサービスのサーバーサイドの用途に使っている。 プライベートでは使うことはあまりない。と思ったが、BSD版とGNU版のsedの違いを調べるのが面倒になり、代わりにPerlを使うということもあった。

使っていたバージョンは perl 5.34で、最新バージョンは 5.39.6 だ。

Perl Releases - dev.perl.org

5.38 では class 構文が追加されたり、モジュールの最後に1;を書かなくてよくできるという変更があるようだ。

Perl後方互換性を重視する言語なのに、大きな変更も少しずつ入っていて感心する。

tech.mobilefactory.jp

perldoc.jp

Go

仕事でAPIサーバー用途で使っている。仕事でGoを使うのは初めてだったので、Goのいいところも微妙なところも実感できた一年だった。

使ったバージョンは1.18または1.20で、最新バージョンは1.21。

min, max, clear がbuilt-in 関数に追加されたり、標準ライブラリに log/slog, slices, maps, cmp 追加されたり、色々と追加されている。WASIへの対応について今はexperimentalということだが今後の動向が気になる。

Goについては今後も適材適所で使っていきたい。

go.dev

Python

主にプライベートで、簡単なスクリプトなどを書くときなどに使っている。OpenAIのAPIを叩いて遊ぶときなどにも使う。

主に使ったバージョンは 3.10で、最新バージョン: 3.12。高速化や、型ヒント周りの変更が気になった。Never型が追加され、ジェネリクスの新しい構文などが入っている。個人用のスクリプトでもなるべく型ヒントをつけようと思っているので、進化しているのはうれしい。

www.python.org

https://docs.python.org/3.12/whatsnew/3.12.html#pep-695-type-parameter-syntax

https://docs.python.org/ja/3.11/whatsnew/3.11.html#summary-release-highlights

atmarkit.itmedia.co.jp

gihyo.jp

その他

TypeScript、JavaScript、Kotlin、Java、Swiftなど、その他のプログラミング言語も眺めて行きたかったが、力尽きてしまった。

年末なのでカメラのファイルをバックアップした

年末なのでデジカメのファイルをバックアップした。rsyncaws CLI を使って、DropboxとS3にバックアップを行った。更にタスクランナーに追加して、簡単にバックアップを実行できるようにした。

SDカードからDropbox

Dropboxの2TBプランを使っていて、空き容量に余裕があるのでDropboxに写真のバックアップをしている。

SDカードにデータが入ったカメラをUSBケーブルでmacにつないで、 rsync コマンドを使ってカメラのファイルをDropbox のフォルダに移動する。後はDropboxのデスクトップアプリがファイルをアップロードしてくれるのを待つ。

rsync -avu --progress --exclude=".*" /Volumes/Untitled/ ~/Library/CloudStorage/Dropbox/Camera/ZV1/

SDカードからS3

aws CLIaws s3 sync コマンドを使って、s3バケットにカメラのファイルをアップロードした。Dropboxになにか問題が起きたときや、Dropboxを脱出したいときのことも考えてS3にもバックアップするようにした。まだS3にバックアップしておいたよかったと思ったことはないけど、保険みたいなものだ。

aws s3 sync --storage-class STANDARD_IA /Volumes/Untitled/ s3://your-s3-bucket

スクランナーを使う

繰り返し行うことなので、忘れないようにタスクランナーで実行できるようにしてみた。

最近使い始めたTaskというタスクランナーを使った。

nakaoka3.hatenablog.com

タスクの定義を Taskfile.yml に書くと、 task タスク名 で実行できるようになる。以下の例では task backup-to-dropboxDropboxにバックアップするタスクが実行できる。

version: '3'

tasks:
  backup-to-dropbox:
    desc: "カメラのファイルをDropboxにバックアップする"
    cmds:
      - rsync -avu --progress --exclude=".*" /Volumes/Untitled/ ~/Library/CloudStorage/Dropbox/Camera/

  backup-to-s3:
    desc: "カメラのファイルをS3にバックアップする"
    cmds:
      - aws s3 sync --storage-class STANDARD_IA /Volumes/Untitled/ s3://your-s3-bucket

複数のタスクをまとめる

複数のタスクを呼び出すタスクを作る事もできる。以下の例では backup-to-dropboxとbackup-to-s3 の2つのタスク を呼び出す backup というタスクを追加した。

  backup:
    desc: "カメラのファイルをDropboxとS3にバックアップする"
    cmds:
      - task backup-to-dropbox
      - task backup-to-s3

このように書くと一つのタスクで、他の複数のタスクを順番に実行できる。

グローバルタスク

ホームディレクトリにおいた Taskfile.yml に定義されたタスクは、どのディレクトリからでも task -g タスク名 で実行できる。

上記の場合だと task -g backup というコマンドを実行すると、Dropboxへのバックアップを行った後に、S3へのバックアップを行う処理が実行される。

カメラのバックアップは手作業でやるとなるとやり方を忘れたり手間がかかる作業だ。なるべく自動化で簡単にしていきたい。

Task(go-task)を使い始めた

Goで書かれているTaskという名前のタスクランナーを使い始めた。仕事でMakeをタスクランナーとして使っていたところを、Taskに置き換えようという動きがあったので、仕事で使いつつプライベートでも使って慣れようとしている。

Taskでは Taskfile.yml というYAMLファイルにタスクを書いて、task コマンドで実行する。Makefileよりは読みやすいし書きやすそうでいい。

taskfile.dev

補完

taskコマンドの補完が効かなくて不便だと思っていたら、補完のセットアップをしたらできると同僚に教えてもらった。zsh用のセットアップをすると無事補完が効いて、効率的に使えるようになってよかった。

ホーム|タスク #補完のセットアップ

task -l と task -a

taskコマンドには -l または --list というオプションがあるので、これでタスクの一覧が確認できるのかと思ったら、一覧は表示されるのに含まれていないタスクがある。このオプションだとdescriptionが書かれたタスクしか一覧に表示されない

一方で -a または --list-all オプションだとdescriptionがないタスクも一覧表示される。

-a を使うのではなく、descriptionを書いて -l で使うべきなのだろう。タスクの数が増えると、使う頻度の低いタスクやややこしいタスクは何をするものなのか分からなくなる。Makeを使っているときはそうだった。調べたらわかるだろうが無駄な労力だ。わかりやすい description を書いて時間と判断の節約をしていきたい。

macのショートカット.appでやってること

macにはショートカット.appというアプリが入っている。「アクション」を組み合わせた一連の処理をショートカットとして登録しておくとワンクリックで実行できるという機能だ。複雑なロジックをショートカットで組み立てるのは大変そうだが、トリガーや入出力の取り回しが便利そうなので使ってみた。

support.apple.com

記事中で使っているmacOSはSonoma(macOS 14)、ショートカット.appのバージョンは7.0(2106.0.3)です。

時計.appでタイマーを開始する

「10分間だけ〜をやろう」というように、時間制限をつけて作業するときに使う。

時計.appでタイマーを開始する

変数を指定する方法が独特でわかりにくくて苦労した。右クリックすると選択メニューが表示されるというのは、一度見つけたらわかるが、初見ではわからなかった。なんとなくXcodeを初めて触ったときを思い出した。

右クリックで変数の選択メニューが表示される

「メニューバーにピン固定」のチェックを入れておくとメニューバーから実行できるので便利だ。

メニューバーに固定しておくと便利

Homebrewの更新をする

Homebrewでインストールしたパッケージを更新するのに使う。

シェルスクリプトを実行」というアクションでシェルスクリプトの実行ができるのでHomebrewでインストールしているパッケージの更新もできるようにした。

ショートカットは以下のようなコマンドで実行する事もできる。

$ shortcuts run "check brew"

これの何が嬉しいかというと、成功して標準出力があるときにダイアログを表示したり、失敗したときに通知が送られる。

ショートカット内の「シェルスクリプトを実行」失敗したときの通知

上記のコマンドをcronなどを使用して定期的に実行しておけば、更新がないときは静かに成功して、更新があったときや失敗したときだけ結果を表示するということもできる。

このようにターミナルから実行できるスクリプトも、ショートカットで実行するとmacOSGUIと統合された体験ができる。

まとめ

いくつかショートカットを作ったけど、たいていシンプルなものばかりだ。ショートカットには「if文」などのアクションもあるけど、辛そうなのでやってない。ロジックがあるときはスクリプトに書いて、トリガーや入出力のためにショートカットを使うのが楽そうだ。