表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
7時22分の電車で始まる恋  作者: ほしみん


この作品ページにはなろうチアーズプログラム参加に伴う広告が設置されています。詳細はこちら

66/83

第66話 バックエンド開発への挑戦

 卓也さんが「まずはバックエンドからだ」と言った瞬間、僕は率直に疑問を口にした。


「バックエンドって、具体的に何をするんですか?」


 卓也さんは振り返ると、いつものように少し笑って言った。


「百聞は一見にしかず。実際に動いてるのを見せてやる」


 そう言うと、卓也さんは自分のPCに向かい、キーボードをカタカタと叩き始めた。コマンドプロンプトが開かれ、何かのコマンドが実行される。僕には何が起こっているのかよく分からなかったが、卓也さんの手つきは迷いがなく、まるで楽器を演奏するように滑らかだった。


「よし、起動した」


 卓也さんがブラウザを開き、アドレスバーに「localhost:3000/users」と入力した。エンターキーを押すと、画面に英語の文字列がズラッと表示された。


「なんか英語でズラッと出てきた!これがAPI?」


「そうだ。これは俺がテスト用に作ったやつだが、バックエンドがやってることの基本がこれだ」


 画面には、確かに何かのデータが表示されていた。名前らしきものや、IDのような数字が並んでいる。JSON形式、と卓也さんが言っていたが、僕にはただの英語の羅列に見えた。


「このusersの部分を、水野屋の商品に置き換えて考えてみろ」


 卓也さんが画面を指差しながら説明する。


「千尋ちゃんがスマホで商品を見る時、裏でこんな感じでデータを取ってるんだ」


 その瞬間、僕の頭の中で何かが繋がった。


「あ!千尋のアプリの裏でこういうのが動いてるのか!」


 水野屋のアプリで千尋が商品一覧を見る時、この画面のような仕組みが裏で動いている。千尋がタップする度に、こんなデータのやり取りが発生している。そう考えると、急に身近に感じられた。


「理解できたところで、実際に作ってみるか」


 卓也さんが新しいウィンドウを開いた。今度はVisual Studio Codeというエディタだった。


「まずは明確な目標を決めよう。localhost:3000/hello にアクセスすると『Hello World』が返ってくるAPIを作る」


「NestJSのControllerっていう仕組みを使うんだ」


「えっと、これをどう書けば……」


 僕は画面を見つめたが、何から手をつけていいのか分からなかった。


「まずはコピペでいい。動く感覚を掴もう」


 卓也さんが手本を見せながら、実際にコードを入力し始めた。


 画面に以下のようなコードが表示された:


 ```

 import { Controller, Get } from '@nestjs/common';


 @Controller()

 export class AppController {

  @Get('hello')

  getHello(): string {

  return 'Hello World';

  }

 }

 ```


「@Controller()は『このクラスがAPIの窓口です』って意味」


 卓也さんが一行ずつ説明してくれる。


「@Get('hello')は『/helloにGETでアクセスされたら、この関数を実行』って意味だ。この場合だと'Hello World'という文字列を返す処理が実行される」


「@マークって何ですか?」


「デコレータっていう、TypeScriptの機能だ。関数やクラスに特別な意味を持たせることができる」


 僕は言われた通りにコードをタイピングした。まるで呪文を写しているような気分だった。


「よし、保存したら今度はサーバーを起動するぞ」


 卓也さんがターミナルで「npm run start:dev」とコマンドを入力した。画面に何行かの文字が流れて、最後に「Application is running on: http://localhost:3000」と表示された。


「じゃあブラウザで確認してみよう」


 卓也さんがブラウザのアドレスバーに「localhost:3000/hello」と入力してエンターキーを押した。


 画面に「Hello World」と表示された。


「うわあ!僕が書いたコードが動いてる!」


 思わず声を上げてしまった。確かに僕がキーボードを叩いて入力したコードが、ブラウザの画面に結果を表示している。こんな単純なことなのに、なぜか感動的だった。


「これがAPIの基本だ。URLにアクセスすると、関数が実行されて結果が返る」


「今度は水野屋の商品データを返すAPIにしたい!」


 成功の興奮で、僕は次々とアイデアが浮かんできた。


「お、やる気出てきたな。じゃあ /products エンドポイントを作ろう」


 卓也さんも嬉しそうだった。


「今度は、さっきのコードに追加する形で書いてみよう」


 卓也さんが画面上で、先ほどのコードの下に新しい関数を追加し始めた。


 ```

 @Get('products')

 getProducts() {

  return [

  { id: 1, name: '桜餅', price: 150, category: '季節もの' },

  { id: 2, name: '草餅', price: 130, category: '定番' },

  { id: 3, name: 'あんみつ', price: 200, category: 'デザート' }

  ];

 }

 ```


「実際の水野屋の商品データを想定して作ってみた」


 卓也さんが説明する。


「さっきの『Hello World』は単純な文字列だったけど、今度は配列を返してる。この角括弧『[ ]』が配列で、中括弧『{ }』がオブジェクトだ」


「一つ一つの商品がオブジェクト。それを配列で包んで複数の商品を返すようにしてるんだ」


 なるほど、データの構造にも意味があるのか。


「千尋が見るデータを僕が作ってる……」


 感動で言葉が詰まった。プログラミングが、急に現実的で特別なものに感じられた。


 コードを保存して、サーバーが自動的に再起動する。そして「localhost:3000/products」にアクセスした。


 画面に、水野屋の商品データがJSON形式で表示された:


 ```

[

  {"id":1,"name":"桜餅","price":150,"category":"季節もの"},

  {"id":2,"name":"草餅","price":130,"category":"定番"},

  {"id":3,"name":"あんみつ","price":200,"category":"デザート"}

 ]

 ```


 桜餅、草餅、あんみつ。どれも千尋の家で実際に売られている商品だった。


「これ、千尋のスマホから見えるやつですよね!」


 僕は興奮していた。


「そうだ。千尋ちゃんのアプリが、この裏でこのAPIを呼んでるんだ」


 このデータを千尋が見ることになるかもしれない。千尋がスマホをタップして、このデータが表示される。そう思うと、胸が熱くなった。


 しばらく画面を見つめていた僕は、ふと疑問に思った。


「卓也さんはどうやってこんなに詳しくなったんですか?」


 卓也さんの技術力は、僕から見ると魔法のようだった。どうすればそんな風になれるのだろう。


「筑波大学の情報学群で基礎から学んだんだ」


 卓也さんが振り返った。


「大学でちゃんと学べば体系的に理解できる。独学だけじゃ限界があるからな」


「筑波大学の情報学群……僕も行けるかな」


 初めて、具体的な大学への憧れを抱いた。今まで大学なんて漠然としたものだったが、卓也さんのような人になれる場所として、急に現実的に感じられた。


「健太なら十分いけるよ。今の調子で頑張れば」


 卓也さんの言葉に、僕の心は決まった。千尋のためにプログラミングを学ぶ。そして卓也さんのように技術を身につける。そのために、筑波大学の情報学群を目指そう。


 画面には相変わらず水野屋の商品データが表示されていた。桜餅、草餅、あんみつ。千尋が愛する和菓子たちが、今は僕の作ったプログラムの中で輝いて見えた。


 僕の技術学習は、今日から本格的に始まったのだった。

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ