![見出し画像](https://assets.st-note.com/production/uploads/images/148026884/rectangle_large_type_2_590567724619e89c4ce3977508f6384d.png?width=1200)
【完全保存版】Solana Playgroundで3つのプログラムを作ってみよう!
0 はじめに
今回は、こちらのSolana Playgroundから色々なプログラムを作ってみます。
「Solana Playground」に初めて接続した場合、「Not connected」となっているので、そちらを選択します。
![](https://assets.st-note.com/img/1721550015724-Ld3TFOBWxu.png?width=1200)
「キーペアを保存しますか?」のような文言が出ると思いますので、保存すると、このように黄緑色になります。
これで、「Solana Playground」で使用するウォレットができました。
ちなみに、こちらのウォレットには実際の資産を入れないことを強くお勧めします。
![](https://assets.st-note.com/img/1721550131151-NjessdOiOf.png?width=1200)
では、テスト用のトークンを取得しましょう。
solana airdrop 5
と入力すると、5SOLを取得できます。
![](https://assets.st-note.com/img/1721550144704-Kf88UNwICn.png?width=1200)
うまくいかないこともありますので、その場合は、こちらのサイトがおすすめです。
こんな感じで実行すると
![](https://assets.st-note.com/img/1721550151628-Y97MB7DXlw.png?width=1200)
「Success!」となり、これでテストトークンを取得できました!
![](https://assets.st-note.com/img/1721550155823-TQbuNUkwNh.png?width=1200)
1 Hello Anchor
1 コードを作ろう
では、「Hello Anchor」をやってみましょう!
こちらを選択します。
![](https://assets.st-note.com/img/1721537583796-Z8bwldqMBA.png?width=1200)
「START」で進みます。
![](https://assets.st-note.com/img/1721537604223-7vHOkasWQW.png?width=1200)
下の部分を貼り付けます。
なお、上の部分は必要な「anchor_lang::prelude」のインポートを行っています。
下の方は、これから作られるプログラムIDの宣言をしています。(ただこれは、Solana Playgroundでだけ必要なものです。)
![](https://assets.st-note.com/img/1721537628506-FdMMACHlJu.png?width=1200)
次に下のように貼り付けます。
ここでは「hello_world」という名前のプログラムを作り、「hello」という関数を作っています。
![](https://assets.st-note.com/img/1721537654464-azRfLLJF3b.png?width=1200)
次に、こちらも貼り付けましょう。
この関数は、「Hello, World!」とメッセージを表示するようです。
![](https://assets.st-note.com/img/1721537685145-486Av0ieGw.png?width=1200)
次に、コンテキストの設定を行います。
この関数ではアカウントが使われていないので、イメージしにくいのですが、どのようなアカウントを使うのかを指定します。
今回は、「Hello」という構造体を取るのですが、結果的に中身は空の状態です。
![](https://assets.st-note.com/img/1721541852246-PRSVrR1mZ9.png?width=1200)
2 デプロイしよう
では、デプロイしてみましょう。
まずこちらの部分から、「Build」を選択します。
![](https://assets.st-note.com/img/1721537836514-kfSR2kKqRj.png?width=1200)
そして、「Deploy」を選択します。
![](https://assets.st-note.com/img/1721537853624-PQ28dCedSZ.png?width=1200)
これでデプロイができました。
3 テストをしてみよう
では、こちらから「Test」を選択しましょう。
![](https://assets.st-note.com/img/1721537881225-8V3xbitIVl.png?width=1200)
実行できたようです。
下の「Solana Explorer」を見てみましょう。
![](https://assets.st-note.com/img/1721537897453-PnlgCtrojS.png?width=1200)
下の方を見てみると、このように、実行できていそうだと確認することができました。
![](https://assets.st-note.com/img/1721537924717-gfxSuXPbtX.png?width=1200)
2 Counter PDA Tutorial
次は、こちらを実行してみましょう。
0から1ずつ増えていく「counter」というアカウントを作っていきます。
1 コードを作ろう
まずは、「Go back to tutorials」で元の場所に戻ります。
![](https://assets.st-note.com/img/1721538338425-1mvKAWNQfB.png?width=1200)
「Counter PDA Tutorial」を選択します。
![](https://assets.st-note.com/img/1721538354857-TlOT0usDL1.png?width=1200)
「START」を選択します。
![](https://assets.st-note.com/img/1721538378393-GJ5YM3zYmY.png?width=1200)
3ページ目のこちらを「create_counter」関数に貼り付けます。
![](https://assets.st-note.com/img/1721538424433-S6MmpMLx6s.png?width=1200)
続いて、5ページ目のこの部分も「update_counter」関数に貼り付けます。
![](https://assets.st-note.com/img/1721538455052-pTEztL8x35.png?width=1200)
そして、45行目の「init」を下のように、「init_if_needed」に変更します。
(ここは変えなくても大丈夫ですが)
![](https://assets.st-note.com/img/1721538475110-Bz7AFqVIL6.png?width=1200)
ちなみに簡単な解説です。
今回は「counter」というプログラムにcreate_counter関数とupdate_counter関数があります。
![](https://assets.st-note.com/img/1721538507168-q6HThR8Pix.png?width=1200)
create_counter関数は「CreateCounter」という構造体のアカウント群を取ります。
その内容が40行目からで、「authority」「counter」「system_program」という3つのアカウントを使用します。
![](https://assets.st-note.com/img/1721538550784-kH9lUksSfu.png?width=1200)
ちなみに、「counter」は「Counter」という構造体を取ります。
63行目にあるように「authority」と「count」という2つの値をとります。
また、「seeds」を必要としているので「PDA」になります。
![](https://assets.st-note.com/img/1721538598330-pjAZwsCgta.png?width=1200)
PDAの詳細は省きますが、プログラムから「シード」の値によって派生したアドレスです。
![](https://assets.st-note.com/img/1721546874161-ZeGZHpwTAE.png?width=1200)
詳しくはこちらです。
「create_counter」の関数を見てみると、「counter」の中の「authority」に署名者の公開鍵を、「count」に0を入れています。
![](https://assets.st-note.com/img/1721538639292-08lkPNVNL3.png?width=1200)
「update_counter」関数を見てみると、どうやら1ずつ増えるようになっていることがわかります。
![](https://assets.st-note.com/img/1721538666607-xJaspDCzCG.png?width=1200)
2 デプロイしよう
では、デプロイしてみましょう。
手順は「Hello Anchor」と同じです。
![](https://assets.st-note.com/img/1721538696138-lMxHfdLnf5.png?width=1200)
3 テストをしよう
では、「createCounter」からテストをしてみましょう。
今回は「counter」の部分が注意です。
ここはプログラムから派生する「PDA」だからです。
![](https://assets.st-note.com/img/1721547574326-aznB38g8Zz.png?width=1200)
PDAは「シード」から派生するので、「From seed」を選択します。
![](https://assets.st-note.com/img/1721538762895-fjQ1yXOGO9.png?width=1200)
今回は、署名者の公開鍵をシード値に設定しているので、「publicKey」を選択します。
![](https://assets.st-note.com/img/1721538783836-v6VDKkOj4x.png?width=1200)
そして、署名者は今回自分なので、「Current wallet」を選択します。
![](https://assets.st-note.com/img/1721538800336-X9DhVs91dZ.png?width=1200)
これで準備ができましたので、「Generate」を選択します。
![](https://assets.st-note.com/img/1721538836517-CXVtgcpMox.png?width=1200)
このようにPDAを抽出できたので、「Test」を選択します。
![](https://assets.st-note.com/img/1721547455489-XWr24bPI2V.png?width=1200)
すると、下のように「createCounter」がうまくいったようです。
![](https://assets.st-note.com/img/1721538877960-FbgSLtAvPX.png?width=1200)
「Counter」の「Fetch All」を選択し、本当にアカウントができたかを確認してみましょう。
下のように、できたことが確認できました。
![](https://assets.st-note.com/img/1721538906721-wcsKjdDpUn.png?width=1200)
同様にして、「updateCounter」も「Test」をしてみましょう。
うまく行けば、「count」が+1されるはずです。
![](https://assets.st-note.com/img/1721538933486-QpuRVlxR8n.png?width=1200)
実行後に「Fetch All」を見てみると、このようこのように+1されていることが確認できました。
![](https://assets.st-note.com/img/1721538960287-RGqrtfjwxn.png?width=1200)
3 Tiny Adventure
1 コードを作ろう
では、「Go back to tutorials」で戻りましょう。
![](https://assets.st-note.com/img/1721540280179-1NTG23Fzdo.png?width=1200)
「Tiny Adventure」を選択します。
![](https://assets.st-note.com/img/1721540334731-SL5uSbmGYu.png?width=1200)
「START」を選択します。
![](https://assets.st-note.com/img/1721540359913-AUoiggcMCn.png?width=1200)
構成としては、「tiny_adventure」というプログラムに3つの関数が存在しています。
![](https://assets.st-note.com/img/1721540396513-LF8WxzV8AA.png?width=1200)
では「initialize」という関数を見てみましょう。
「Initialize」という構造体のアカウントを取り、下のように、「new_game_data_account」「signer」「system_program」という3つのアカウントを持ちます。
![](https://assets.st-note.com/img/1721540447271-MfgK9f7bCl.png?width=1200)
そのうち、「new_game_data_account」が実際に使われるアカウントで、「GameDataAccount」という構造体を取り、「player_position」という値をとります。
![](https://assets.st-note.com/img/1721540517223-qxg3qCMNOn.png?width=1200)
他にも、「move_left」という関数は「MoveLeft」という構造体を取ります。
![](https://assets.st-note.com/img/1721540475579-e237GW0YnD.png?width=1200)
「move_right」という関数は「MoveRight」という構造体をとっています。
![](https://assets.st-note.com/img/1721540546505-800w4aXqMQ.png?width=1200)
「initialize」関数を見てみましょう。
どうやら、「player_position」に0という値を入れているだけのようです。
![](https://assets.st-note.com/img/1721540602707-Pmebv3LDyg.png?width=1200)
「move_left」という関数を見てみましょう。
こちらは値が0の時はメッセージを表示するだけで、そうでない時は値を−1しているようです。
![](https://assets.st-note.com/img/1721540648451-9Y5tUfm0h3.png?width=1200)
一方、「move_right」という関数は、値が3の時はメッセージを表示するだけで、それ以外の時は、+1しているようです。
![](https://assets.st-note.com/img/1721540737631-ZgOf45ySOJ.png?width=1200)
2 デプロイしよう
こちらは、今までと全く同じなので、省略します。
3 テストをしよう
では、テストをしてみましょう。
今回のPDAのシードは「level1」という文字列です。
そのため、まずはPDAなので、前回同様「From seed」を選択し、
![](https://assets.st-note.com/img/1721540813409-GQUWP0leqM.png?width=1200)
文字列なので、「string」を選択します。
![](https://assets.st-note.com/img/1721540830747-63pE03rips.png?width=1200)
「custom」を選択し
![](https://assets.st-note.com/img/1721540843857-SwnhDBHukf.png?width=1200)
「level1」と入力し、「Generate」を選択します。
![](https://assets.st-note.com/img/1721540869585-SXZO6sWxSX.png?width=1200)
これによって、PDAが抽出できたので、「Test」を実行します。
![](https://assets.st-note.com/img/1721540901835-o9WBCdOIN7.png?width=1200)
すると、このように、うまくいったようです。
![](https://assets.st-note.com/img/1721540918767-3uM3VTFP7i.png?width=1200)
「Accounts」から「Fetch All」を選択すると、アカウントができていることを確認できました。
![](https://assets.st-note.com/img/1721540949920-yfEDtsb8q1.png?width=1200)
では、「moveRight」を実行してみましょう。
値が+1になるはずです。
![](https://assets.st-note.com/img/1721541001113-rHBKjzo1qj.png?width=1200)
このように実行ができたようです。
![](https://assets.st-note.com/img/1721541026860-9Td8j1JOOl.png?width=1200)
確認すると、このように値が+1されていました。
![](https://assets.st-note.com/img/1721541039444-SkVVcmhGvs.png?width=1200)
そして、何回か実行すると、このように値がMaxである3になっていることが確認できました。
![](https://assets.st-note.com/img/1721541067964-96L8wwqlUs.png?width=1200)
以上で今回のプログラムの作成は終わりです。
最後までありがとうございました。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊