koogawa blog

iOS、Android、foursquareに関する話題

2023年を振り返る

時の流れは早い!!

宮崎県青島にて人生初のテイクオフ

というわけで、2023年を振り返ってみたいと思います。

2022年の振り返りはこちら


仕事面

昨年に引き続き、NFT関連のプロダクトに多く携わりました。

prtimes.jp

prtimes.jp

今年は自分たちのサービスというよりは、他社のプロジェクトに技術面でサポートさせていただく機会が多かったように思います。今まで自社サービスが中心だったので、社外とのコミュニケーション面など多くのことを学びました。

来年は講談社様、ピクシブ様の協力のもと「NIZI.JP」というサービスもリリース予定なので、興味のある方はぜひ使ってみてください!

prtimes.jp

会社でMVPを頂いた

たいへんありがたいことに今年もMVPを頂きました🎉

なんと2回連続の受賞らしいです。Valueを発揮できる環境に身を置けることを大変嬉しく思います。これからもやっていきます💪

副業

今の会社にはもう5年ほど在籍しているのですが、同じ環境に長くいるとどうしても視野が狭くなりがち、という課題がありました。ちょうどそんなとき、TimeTree社で働く元同僚の id:gonsee から声を掛けていただき、11月から業務委託としてiOSアプリの開発をお手伝いしております。約2年ぶりにSwiftをガッツリ触っていますが、やはりiOSアプリ開発は楽しいです。

また、朝会の進め方やSlackの雰囲気など、会社が違うだけでこんなにも違うんだなーというのを再認識しました。

ひとつ例を挙げると、TimeTreeさんのiOSチームは本当に仲が良く(もちろん他のチームもみんな仲良しです!)、毎週の定例でも半分は雑談をしているのには驚きました。一人ずつ今週やったことを共有する際に「アイスブレイク」というコーナーがあって、そこで「⚪︎⚪︎に行ってきた」「⚪︎⚪︎が美味しかった」など、業務とは関係ないことを話せる時間が4分ほど用意されているんですね。だからメンバーも安心して雑談に時間が割ける。さらにその雑談部分が社内に共有される仕組みになっているのは面白いです。

詳しく知りたい方はこちら!

timetreeapp.com

Studio Display買った

前から気になっていたAppleのStudio Displayをついに買ってしまいました!

www.apple.com

ディスプレイは映り込みが少ない「Nano-textureガラス」も選択できましたが、ピカピカした画面が欲しかったのと、黒の発色が良いとのレビューを見たので、敢えて「標準ガラス」を選択しました。しばらく使っていますが、反射は全く気になりません*1

ディスプレイの高さを調整する機会も実はほとんどないので、スタンドは「傾きを調整できるスタンド」で十分でした(5万円の節約!)

内蔵のスピーカーも重低音がしっかりしていて、音楽を聴くのが楽しみになりました。

総合評価としては⭐️5です。今年買ってよかったもの第1位と言っても過言ではないです。

プライベート

初の出演映画が公開される

私が出演する映画「天尊降臨ヒムカイザー THE MOVIE」が、8/18より宮崎県内の映画館にて公開されました🎉

良い感じに隠れていますが、ちゃんといます。

当初は1ヶ月のみの上映予定でしたが、好評につき10月下旬までのロングランとなりました👏

「映画のエンドロールに自分の名前が載る」という夢も叶いましたし、とても良い経験になりました🌟関係者の皆様、そして映画をご覧いただいた皆様、本当にありがとうございました!

サーフィンをはじめた

昨年の記事で「2023年の目標」にも掲げた通り、ついにサーフィンデビューしました🏄

持ち前の運動音痴を発揮し、1回目はまったく立つことができませんでした。

しかし、翌月のリベンジでようやく立ち上がることができました🎉

40過ぎたおじさんでもなんとかなるもんですね。

ヘラクレスオオカブトを育ててみた

こちらも「2023年の目標」のひとつですが、ずっと育ててみたかったヘラクレスオオカブトふるさと納税でお迎えしました。

日本のカブトムシとは違い、ヘラクレスオオカブトは成虫になっても1年ほど生きられます*2。今回お迎えしたヘラクレスも2022年12月には羽化(さなぎから成虫になること)しており、我が家に届いた4月から11月まで生き続けてくれました。

7ヶ月間という短い期間でしたが、大切な時間をありがとう!🥺

キックボクシングをはじめた

映画に出るということもあり、実は10キロほどダイエットしていたのですが、筋肉も一緒に落ちてしまった感がありました。そんな中、Instagramで良さそうなキックボクシング教室を発見し、これを機にキックボクシングを始めました。

実はもともと空手と少林寺拳法をやっていたこともあり、スイッチからのミドルキック*3も割とすぐに習得することができました。

また、自分自身がキックボクシングを経験することにより、格闘技の試合を観る際も、より楽しめるようになりました。

週一ペースで現在も続いているので、来年も楽しく続けていきたいと思います🥊

来年の目標

さて、最後に来年の目標を宣言して締めたいと思います。

  • ソフトウェアエンジニアでありたい
  • NHKのど自慢大会に申し込む(宮崎開催があれば)
  • 息子と一緒にマラソン大会に出る

皆さま良いお年をお迎えください🎍

*1:映り込みが激しかったThunderbolt Displayと比較すると、標準ガラスは驚くほど思うほど反射が少ないです

*2:日本のカブトムシは羽化後2〜3ヶ月生きると言われています

*3:瞬時に足を入れ替えることにより、構えの前足でミドルキックを打つことができる(普通は後ろ足で蹴りますよね)

Gitで不要になったリモートブランチを削除するタイムを設ける

マージ後にブランチを自動削除する運用にしていても、なぜか残ってしまうブランチたち。

↑こうなっていると目的のブランチに辿り着くのに時間がかかるので、特別な理由がない限り不要になったブランチは削除したほうがよい

とはいえ、そのブランチが不要かどうかは、作った本人にしか判断できない問題も生じる。そこでおすすめなのが、定期的に「不要になったリモートブランチを削除するタイム」を設けること。

原始的すぎてビックリしたかもしれないが、もっとも確実な方法だと思う。

自分が作ったブランチは「Yours」タブに集められるので、

次のようにURLも載せてあげると親切だろう。

https://github.com/(プロジェクト)/(リポジトリ)/branches/yours
から不要なブランチをポチポチ消していってね!

また、長い間放置されているブランチは「Stale(=新鮮でない)」タブに集められる。

「⚪︎ヶ月以上使われていないブランチは削除する」のような基準を設けても良いかもしれない。

おまけ:リモートで消されたブランチがローカルに残ってしまう件を解消する

リモートのブランチがスッキリしても、ローカルには不要なブランチが残り続けてしまう。そんなときは下記コマンドでローカルに残ったブランチを一掃できる。*1

$ git remote prune origin

*1:git fetch --prune でも削除できるらしいが、どちらが良いのかはわかっていない

PHPカンファレンス福岡 2023 #phpconfuk に参加してきたよ

4年ぶりに開催されたPHPカンファレンス福岡に行ってきました。

phpcon.fukuoka.jp

今年で4回目の参加です。会場はもちろん福岡ファッションビル

オープニングトークには間に合わず!

今年もカンファレンスTシャツを頂きました。私が到着した頃にはもうMサイズしか残っていませんでした。大人気!

今年もこのTシャツを着てウロウロしていました

今年も素晴らしいセッションが盛り沢山でした。そのうちいくつかをピックアップしたいと思います。

福岡に来たらとりあえず食べる長浜ラーメン



伝えたい!オフラインのカンファレンスに参加するメリットと参加してから200%楽しむために実践してほしいこと

登壇者:kotomin_m さん

speakerdeck.com

ことみんさんによる発表です。カンファレンスに参加するメリットや、当日聞くセッションの選び方、カンファレンスで話しかけるときの鉄板フレーズ集など、初めてカンファレンスに参加する方にも優しいトークでした。私自身、コミュニケーションがあまり得意な方ではないので、具体的な会話例はとても参考になりました。

レガシー回避のPHP開発術:保守性の高いアプリケーションを作る方法

登壇者:hanhan1978 さん

speakerdeck.com

カオナビ富所さんによる発表です。

"レガシー回避のPHP開発術" というタイトルでしたが、技術的な内容というよりは、チームや組織の話が多かった印象です(個人的には良かった)。

45分のトークでしたが、スライドは200枚を超えており、富所さんの経験やノウハウが詰まった盛りだくさんの内容でした。

個人的に刺さったのは「改善しないと、改善されないんだよ?」 という耳が痛いワードや、「人間関係の再構築」に意外と時間がかかる、という内容でした。スライドが公開されたらぜひ読んでいただきたいです。(追記:スライド公開されました)

制約の力: 可能性を狭めるアプローチ

登壇者:shin1x1さん

speakerdeck.com

PHPの現場でおなじみの新原さんによる発表です。

  • 「可能性を狭める」つまり制約を与えることが、可読性やメンテナンス性の向上につながる
  • 制約を与えることで、ソフトウェア開発の複雑さを減らし、本質的な複雑さに立ち向かっていこう

という内容でした。

PHPといえば、次のような関数があった場合、

function add10($v) {
    return $v + 100
}

引数 $v には数値もBoolもセットできてしまいますが、「$v は数値である」という制約を与えるにはどうすればよいか?という具体例がわかりやすかったです。型宣言の無い時代のPHPしか触ったことのない自分にとっては、とても勉強になる内容でした。

型宣言の例以外にも、ライブラリの影響を限定する例など、まさにPHPの現場で活用できそうな内容でした。

さいごに

久々のオフラインイベント参加でしたが、会場の雰囲気やノベルティ配布など、やはり現地参加は良いもんだなーと改めて感じました

PHPカンファレンス関係者の皆様、今年も楽しいイベントをありがとうございました!

とても楽しかったよ!!

来年もまた会いましょう😄

はてなブックマークしたページをTwitterにシェアしてくれるアプレットを作りました

2023.4.26 追記:ブコメもツイートに含めることができるようになりました!すでにお使い頂いている方は、もう一度Connectから再設定してください🙇🏻

はてなブックマークTwitter連携が使えなくなってしまったので、IFTTTのアプレットを作りました。

使い方

ブックマーク時、コメントに「#tw」を入力することでTwitterにシェアしてくれます(#twは別のワードにカスタマイズ可能)

インストール

次のURLにアクセスし、Connectスイッチをオンにします。

ifttt.com

ツイートのトリガーとなる文字列 #tw は自由にカスタマイズできます。

Feed URLの (user_account) の部分を自分のアカウント名に書き換えてください。

デフォルトでは {コメント} / {ページのタイトル} {URL} という形式でツイートされますが、Tweet textを書き換えることで、ツイート本文をカスタマイズできます。

制限事項

  • IFTTTの仕様により、ブックマーク時のコメントはツイート本文に含めることができません -> 2023.4.26 コメントにも対応しました!
  • IFTTTの無料プランではツイート送信までに最大1時間の遅延が発生します
  • Twitter APIの仕様変更により、本アプレットが動作しなくなる可能性があります

2022年を振り返る

今年も色々あったなぁ

門川神社からの景色
宮崎県 門川神社から

そんなわけで、2022年を振り返ってみたいと思います。

仕事・スキル面

ブロックチェーン分野へ

今年の大きな変化として、技術分野をブロックチェーン領域へシフトした、というのがあります。Ethereum等は全く未知の分野でしたが、半年間でなんとかSolidity でスマートコントラクトを書けるぐらいまでにはなりました。自分が書いたコードでトランザクションが動き、ブロックチェーンにデータが書き込まれる体験は本当に面白いです。

12月にはNFT関連のプロダクトである「dango」もベータリリースしました。dangoはgiveaway*1をかんたんにするサービスです。当選後のNFT譲渡(Transfer)までサポートしているので、ぜひ使ってみてください !

dango.ooo

web3ハッカソンにも参加

11月には日本最大級のweb3ハッカソンが開催されるということで、私も参加しました。NFT関連のプロダクトを1番乗りで提出しましたが、残念ながら決勝進出はならず。しかし、なにより「参加」することに意義があったので良しとします。

久しぶりに勉強会で発表

ちょこちょこweb3コミュニティにも顔を出すようになり、Solidity-jp さん主催の勉強会に登壇者として招いて頂きました。私以外の登壇者の面々が豪華で、発表内容も非常にレベルが高いイベントでした。著名な方々に混じって登壇側に立てたのはとても良い経験になりました。

solidity-jp.connpass.com

Next.js

今年使い始めた技術としてNext.jsがあります。Next.jsはReactをベースに開発されたフロントエンドフレームワークです。私はReact未経験でしたが、チュートリアルがしっかりしているため、スムーズに使い始めることができました。

nextjs.org

また、Next.jsに慣れるためには、ひとつ個人でアプリを作ることが手っ取り早いということで、ひとつプロダクトもリリースしました。

NFT Trade スクショ
NFT Trade

残念ながらまったく使われませんでしたが、それも含めて勉強になりました。

会社でMVPを頂いた

ありがたいことに今年は全社MVPを頂きました🎉

評価してもらえる環境に身を置けることを大変嬉しく思います。これからもやっていきます💪

プライベート

ご当地ヒーロー映画に出演が決定

ご当地ヒーロー作品が映画化されるということで、出演者を県民から募集していることを知りました。演技経験は問わないそうなので、私もオーディションに応募してみることに。

演技は全くの未経験でしたが、なんとか1次選考を通過。最終選考は人通りも多い宮崎駅前の特設ステージで行われました。寒さと緊張で終始震えていましたが、見事に合格を勝ち取ることができました🎉

  • 台詞をしっかり暗記してきたこと
  • 大勢のプレッシャーに負けず、台詞が飛ばなかったこと
  • どこにでもいるお父さんっぽいこと

が勝因だったようです。

集合写真
天尊降臨ヒムカイザー THE MOVIE

ついに 映画のエンドロールに自分の名前が載る、という夢が叶いそうです🌟

ミニ四駆大会で優勝

今年の目標に「ミニ四駆大会で優勝する」というのがありましたが、4月に開催されたミニ四駆大会でついに優勝できました🏆

優勝したときの顔
念願の初優勝

かなり運が左右するレースでしたが、それも勝負のうちということで、良しとします。

来年の目標

さて、最後に来年の目標を宣言して締めたいと思います。

皆さま良いお年をお迎えください🎍

*1:NFTを他の人に無料プレゼントすること

Visibility for constructor is ignored. If you want the contract to be non-deployable, making it "abstract" is sufficient

SolidityとEthereumによる実践スマートコントラクト開発 ―Truffle Suiteを用いた開発の基礎からデプロイまで

👆こちらの本のサンプルを試していると大量に出てくる警告です。

constructor() public {
    _owner = msg.sender;
}

どうすればよい?

public を削除します。

constructor() {
    _owner = msg.sender;
}

solidity - Visibility for constructor is ignored. If you want the contract to be non-deployable, making it "abstract" is sufficient - Ethereum Stack Exchange

解説

Solidity 0.7.0からコンストラクターVisibility ( public / external ) は不要になりました。

Visibility (public / external) is not needed for constructors anymore:

Solidity v0.7.0 Breaking Changes — Solidity 0.7.0 documentation

本の執筆時点ではまだ必須だったのだと思われます。

Truffleで特定のファイルだけmigrateする

ethereum.stackexchange.com

Truffleのmigrationファイルは 2_wallet_factory.js のように数字が頭に付きます。例えば 2_ から始まるファイルだけmigrateするには以下のようにします。

truffle migrate -f 2 --to 2