![[6718a162-22fa-4087-9dfb-3bf7908dab03.webp]] # 1on1 ミーティングのトピックを NFT にしました ## 1on1 お願いします  ワンオンワンオン!合宿免許!ワンオン!  宣伝隊長の宮崎です。  1on1 ミーティングね。大変ですよね。  メンバーの立場からは自分のことだけなのでよいのですが、マネージャーの立場からすると人数分の時間と脳のリソースが必要です。私はいまはマネージャやってなくてメンバーの立場なのですが。  なかなか大変だと思うんですよ。  だから…  > 1on1 やってください!  代表の鶴岡の予定にねじ込みました。  私は社内ではだいぶ歳いってますけど、かまってほしいんです。いつもはワンオペ育児をやてますが、ずるい!子どもばっかり優遇されててずるい!壮年男子もかまってほしい!  ふだんは福岡オフィスで YouTube のおもしろ動画を探すかたわらソフトウェア開発の仕事をしたりしています。  いっぽう、本社は大分で鶴岡も大分在住です。ふらりと福岡オフィスに来てはいつの間にか消えています。  かまってもらうには、こちらから大分に乗り込むしかない。 [オフィス移転のお知らせ |イジゲングループ株式会社](https://ijgn.group/newsrelease/post/JvgiSI7w)  とはいえ、1on1 の大変さは理解してるわけですよ。  とくに私は頭の中が忙しいタイプなので、目の前の仕事の話が 2 秒後に芥川賞や受動意識仮説や多世界解釈の話に飛んでしまいがち。時間を有効活用するため、事前に話したいことをリストアップしておくことにしました。  取り上げたいトピックを箇条書きにならべていたところ、おや?これ、物理的なカードにしたらおもしろいのでは?裏返しにして引いてもらうとか。1 枚だけジョーカーを潜ませておいて、引いたら爆弾質問に回答しなければならないとか…(あるいは、私に寿司をおごらないといけないとか)    そういえば、自分の話したいことって他の人も同じように話したかったりするんじゃないでしょうか。  世の中にはソリューションがあふれています。あふれ返っています。課題は存在しないのにソリューションだけが存在していたりします。ソリューションは商品になりますからね。  問題がない人に対しても美容や健康にまつわるソリューションを売りつけようとしていますよね。  そんな状況ですから、世界には課題が足りていないわけです。課題には価値がある。  ということは、1on1 のトピックにも価値があるのではないでしょうか…  > そうだ、NFT にしよう。 [NFT(ノンファンジブルトークン)とは?暗号資産(仮想通貨)との違いは? - DMMビットコイン](https://bitcoin.dmm.com/column/0198)  おもしろいことを思いついたらやってみないと気がすまない若手お笑い芸人マインドを持ち続けています。(そろそろ捨てたい)  さっそく実装してみました。 ## 1on1 NFT を作ってみよう  ここから先はとても乱暴な説明になります。正しくていねいに書くと、ひとつの記事では収まらないので。  正確な説明はあちらこちら探してみてください。 (よくまとまっているので DMM Bitcoin の記事を貼っていますがアフィリンクではありません。この記事をおもしろいと思ったら方はカフェ代おごってください)  これから作るのは、DApps(分散型アプリケーション)と呼ばれるものです。ブロックチェーン上に Smart Contract を実装してバックエンドとします、それをフロントエンドから呼び出します。 [Dappsとは何か?イーサリアムが人気を牽引 - DMMビットコイン](https://bitcoin.dmm.com/column/0142) [ブロックチェーンで自動契約!スマートコントラクトの事例と仕組み - DMMビットコイン](https://bitcoin.dmm.com/column/0138)  よく名前を聞く Ethreum をはじめいろんなネットワークがあって、プロダクトを開発しようと思うと悩みどころです。  今回は、ガス代(あれこれするときの手数料)が安い Polygon を利用します。ガス代が安いので多くの NFT が Polygon 上に発行されています。 [Blockchains for mass adoption](https://polygon.technology) [Home | ethereum.org](https://ethereum.org/en/)  Polygon 上の Smart Contract は Ethreum とおなじく Solidity という言語で記述します。  ちなみに、Dart を使えるネットワークも出てきているので、利用できる開発環境も考慮して選択するという手もあります。 [Solidity Programming Language | The Solidity language portal is a comprehensive information page for the Solidity programming language. It features documentation, binaries, blog, resources & more.](https://soliditylang.org)  開発は Remix のを使うと超かんたんです。  ブラウザ上で開発することができて、npm モジュールでローカルファイルと同期することもできます。mac だとうまくいかなかったのですが VScode と連携するプラグインもあります。 [Remix - Ethereum IDE & community](https://remix-project.org) [@remix-project/remixd - npm](https://www.npmjs.com/package/@remix-project/remixd)  Remix を起動すると開かれるサンプルプロジェクトでも使われていますが、OpenZeppelin のライブラリを使うとこれまた超かんたんに Smart Contract を実装することができます。  ただし、コードのサイズが大きくなるとガス代が高くなってしまいますから、ご利用は計画的に。 [GitHub - OpenZeppelin/openzeppelin-contracts: OpenZeppelin Contracts is a library for secure smart contract development.](https://github.com/OpenZeppelin/openzeppelin-contracts)  今回は NFT を作りたいので、ERC-721 の規格に従います。これも OpenZeppelin のライブラリを使えば超かんたん。  ここに独自のメソッドを実装します。  実装したら、テストからデプロイまで Remix IDE 上で完結します。 (とりいそぎ暗号資産を管理している普段使いのアカウントでデプロイしましたが、セキュリティ的には DApps 用アカウントは別にしたほうがよいです)  次にフロントエンドの実装です。ふつうに web アプリを実装する知識があれば大丈夫です。  今回は、Metamask というメジャーなウォレットに対応しました。  Metamask の Chrome 拡張をインストールしていると、JavaScirpt から `window.ethereum` を操作できようになります。それを使って NFT に実装したメソッドを呼び出します。 [The crypto wallet for Defi, Web3 Dapps and NFTs | MetaMask](https://metamask.io) [Ethereum provider API | MetaMask docs](https://docs.metamask.io/wallet/reference/provider-api/) ## Smart Contract の(雑な)イメージ  これまた乱暴すぎる説明ですが、クラスベースのオブジェクト指向言語における「クラス」みたいなイメージです。  このクラスから、誰でも or (権限管理を実装していれば)決められた人が「インスタンス」みたいなものを生成します。  このインスタンスみたいなもののメソッドを、誰でも or (権限管理を実装していれば)決められた人が呼び出すことができます。  API のイメージです。  Web3 と聞くと拒否反応が出る人もいるかと思いますが、超乱暴に言えば、バックエンドがブロックチェーンになっている web(っぽい)世界です。  データと API を特定の企業か管理するのではなく、いろんな人がアクセスできる。そんなイメージ。  ただ、ここの説明は厳密には正しくなくて、「クラス」と「インスタンス」の例えは Smart Contract の実態と合っていません。あくまで雰囲気。  正確な情報はあちらこちらへ。 ## 1on1 NFT のデモとキモ [1on1 NFT - Collection | OpenSea](https://opensea.io/collection/1on1-nft-1) [1on1 NFT - YouTube|embed](https://youtu.be/Cd5EBVX0tCs)  保有している NFT は、各 NFT マーケットに表示されます。動画内に登場するのは世界最大のマーケットである OpenSea です。 [OpenSea, the largest NFT marketplace](https://opensea.io)  開発したフロントエンドは GitHub Pages で公開しました。公開した ページとウォレットを結びつけると、1on1 NFT のメソッドを呼び出すことができます。  動画は、`OPEN` と `CLOSED` のステータスを変更するメソッドを呼び出しています。  ここで、今回のキモです。  この 1on1 NFT は、誰でも mint(インスタンスを生成するイメージ)することができます。また、自分が保有している NFT のメソッドを呼び出すこともできます。(1on1 では権限管理をしているので操作できるのは所有者のみ)  そして、それらの操作は私が作ったフロントエンドではなくても可能なのです。つまり、1on1 NFT を使って独自のアプリケーションを作ることができたりします。  Web3 界隈では "Composability" と "Interoperability" という言葉が使われています。  誰かが作った Smart Contract を部品としてレゴブロックのように組み合わせて独自の DApp を開発できますし、例えば 1on1 NFT はそうやって開発された Dapps 間で互換性があるということです。(どう取り扱うかは開発者しだい)  これ、ソフトウェアエンジニアとしてテンションあがりませんか? ## 私の Web3 に対するスタンス  web 原理主義の方は(今言われている)Web3 は定義から外れいてるから web ではないし、ソフトウェアエンジニからするとそもそもスーツを着た人々が騒いでるだけで Web3 なんて存在しないじゃないかという感覚だったりします。  個人的にはブロックチェーンまわりであれこれ調べたり遊んだりしていて、「Web3 ってこんな感じなかなー」という感覚を持っています。  明確に定義をするというよりも、結城浩『数学ガール』に登場する「例示は理解の試金石」という帰納法的なアプローチです。別の名前で呼んでもいいのだけど、便利なので「Web3」というワードを使っている。  ただ、加熱していた「にわか」 Web3 界隈とは距離を置いていて、私は「法定通貨を基準とした暗号通貨の価値」も「所有 (own)」も「脱中集権」もすべてどうでもいいと思っています。  ソフトウェアエンジニアとして楽しく遊べればいいんです。  昨年、暗号通貨の(法定通貨を基準とした)価格は暴落しましたが、1 eth の価値は 1 eth から変わってないわけです。所有する暗号通貨を法定通貨に変えるつもりのない私としては無関係です。  むしろ遊ぶためのガス代が安くなってうれしい。  そして、「所有」についてはいろんな場所で誤った情報が語られています。これは無視。  Web3 界隈の人が一番期待している(本当に?)「脱中央集権」ですが、これもどうでもよくて、中央集権が合っているプロジェクトは中央集権的に管理すべきです。  DAO (自律分散型組織)も立ち上げからある程度のフェーズまでは中央集権型の管理をすべしというベストプラクティスがあるようです。 [DAO(自律分散型組織)とは? - DMMビットコイン](https://bitcoin.dmm.com/column/0227)  というわけで、ソフトウェアエンジニアとして私が興味あるワードはあくまで "Composability" と "Interoperability" が中心となっています。  この概念を使って「参加 (join)」に関するあれこれをやってみたいと思っています。  毎日のニュースを追っていると、金融 (DeFi) とゲーム (GemiFi) の話題がほとんどです。  個人的には、この状況はあまり楽しくない。どちらかというと、それらのニュースに混じっている「会員証 NFT」や「学位証明書 NFT」のような「参加」にまつわる話題が好みです。(この後に「就労」関連がくるとおもしろそう)  あとは、Smart Contract の力の見せ所となる「不動産売買」のような仲介者を介さない契約ですね。  なにかしら「実態」のあるもの(物理的なものという意味ではなくて)を提供するプロジェクトをやってみたいと思う今日この頃です。  まあ、そんなことよりソフトウェアエンジニアとして遊び道具が増えたわけですから、まずは遊ばない手はないですよね。  Happy Hacking!