Node.js

ここまでで、HTMLJavaScript というプログラミング言語、 そして、LinuxGit というプログラミングのためのツールを学んできました。

ついにここから Web サービスを作っていきます。
これからの節では、セキュリティの問題のないチャットサービスが作れるようになります。

もくじ

皆さんはニコニコや Google、LINE など沢山の Web サービスを利用した経験がありますね。
これからは、そういった多彩な機能を持つ Web サービスの開発にとりかかっていきます。

そして Web サービスを開発するために Node.js を利用します。
今回は、この Node.js を使った簡単なプログラミングを体験してみましょう。

Node.js

Node.js(ノード・ジェイエス)とは、Web ブラウザ以外でも JavaScript のプログラムを実行するための JavaScript 実行環境です。

入門コース第 1 章で学んだ JavaScript は Web ブラウザ上で実行しました。
しかし Node.js を使えば、Web ブラウザ以外の環境でも、JavaScript の文法で書かれたプログラムを実行できるようになるのです。

そのため、Node.js は Web アプリケーションの「サーバサイド」で使うことができます。
サーバサイドとは、サーバクライアント型 Web アプリケーションのサーバ側のソフトウェアのことです。

また現在では、Node.js はサーバサイドに限らず、開発用ツールやデスクトップアプリの開発にも使われています。
皆さんが今プログラミングに使っている VS Code も、実は Node.js を使って作られているのです。

Node.js は、複数のコアを持つ CPU を活かす必要のない処理では、 C++ や Java といった高速なプログラミング言語と同等のパフォーマンスを発揮します。

また、 JavaScript はスクリプト言語であり、手軽に開発できます。
スクリプト言語は、 C++ や Java などで必要な「コンパイル」という機械語への変換を必要としないのです。

JavaScript と Node.js の使い方を覚えれば、あらゆるシーンで利用できるソフトウェアを一通り作ることができます。

日本国内でもリクルートやヤフー、サイバーエージェント、メルカリ、AbemaTV といった有名 IT 企業で Node.js が使われている実績があります。また、Stack Overflow という世界最大のプログラミング質問サイトにおける 2023 年の調査でも、よく使われている環境との結果が出ています。

他の JavaScript 実行環境系たち

JavaScript の実行環境として最も有名なものは、Node.js です。しかし、近年になって新たな JavaScript 実行環境が発表されています。

例えば、

などが挙げられます。

興味のある方は、試してみてください。

Node.js のインストール

Node.js 自体は Windows や macOS でも使えますが、実際に Web アプリを動かすサーバは Linux である事が多いため、開発環境も Linux に合わせる方が望ましいといえます。

そのため、入門コースでは Docker コンテナで Node.js を使えるようにします。

Docker コンテナで Node.js を使う方法

Docker コンテナで Node.js を使えるようにするためには、次の方法が考えられます。

方法 1 : Ubuntu などの Docker コンテナに Node.js をインストールする

入門コース第 2 章のように、Ubuntu などの Docker イメージをベースにした Docker コンテナを用意し、そこに Node.js をインストールする方法です。

具体的には、Dockerfile に apt-get install で Node.js をインストールする設定を記述します。

方法 1: Ubuntu イメージ + node.js

方法 2 : Node.js がすでにインストールされた軽量な Docker イメージを使用する

Ubuntu などの Docker イメージに Node.js をインストールする設定を追記するのではなく、すでに Node.js がインストールされた Docker イメージを使用する方法です。つまり、Node.js に特化した Docker イメージを使用します。

Node.js に特化した Docker イメージには Node.js を使った開発をするための必要最低限の機能しか入っていないため、非常に軽量です。

このように Docker コンテナの元となる Docker イメージには、単なる Linux ディストリビューションだけでなく、特定の言語や実行環境に特化したものがたくさんあります。

このコースでは、実際の開発でも有用な「方法 2 」で、Node.js の環境を用意しましょう。
今回は「node」という Node.js に特化した Docker イメージを使っていきます。

方法 2: Node.js に特化した Docker イメージ(node イメージ)

Node.js イメージの Docker 環境

Node.js に特化した Docker イメージから、Docker コンテナを構築・起動しましょう。

作業ディレクトリの用意

Docker コンテナの設定ファイル(Dockerfilecompose.yaml)を置くための作業ディレクトリを用意します。

Windows の方は Git Bash を起動します(第 2 章まで利用してきた PowerShell とは別のものなので、注意しましょう)。

また、以下の説明では、ディレクトリの場所を表すために \ ではなく / を用いています。つまり、ディレクトリの場所は ~\workspace\nodejs-study ではなく ~/workspace/nodejs-studyと表記されます。Git Bash では、/ のまま(2 番目の表記のように)入力すれば正しく動作します。そのため、/ のまま入力 するようにしてください。

macOS の方は iTerm2 を起動します。

次のコマンドを入力しましょう。

mkdir -p ~/workspace/nodejs-study
cd ~/workspace/nodejs-study
code .

nodejs-study という新しいディレクトリを作ってそのディレクトリに移動し、VS Code を起動するコマンドです。

ベースとなる Docker イメージ

これから Dockerfile を作っていくのですが、その中にベースとなる Docker イメージを記述します。
今回の場合、ベースとなる Docker イメージは、Node.js に特化した Docker イメージです。
第 2 章の場合は、ベースとなる Docker イメージとして Ubuntu:22.04 というイメージを指定しました。

この、ベースとなる Docker イメージはどこから探せば良いのでしょうか?
答えは Docker Hub です。

Docker Hub

Docker Hub(ドッカー・ハブ)は、公開の Docker イメージを探すための Web サイトです。
オリジナルの Docker イメージを Docker Hub で公開できます。

https://hub.docker.com/

以上の URL にアクセスしましょう。
初めての場合アカウント登録の画面が出ますが、今回アカウントを登録する必要はありません。

ページ上部の検索フィールドに「node」と入力して、検索してみましょう。
すると、「node」という公式の Docker イメージが表示されます。

Docker Hub の node イメージ

「node」をクリックしてみましょう。
すると、「Supported tags and respective Dockerfile links」の項目に、非常にたくさんのバージョンがあるとわかります。

これは、Node.js という環境そのもののバージョンと、Linux ディストリビューションのバージョンがいくつもあるからです。

Node.js のバージョン管理

Node.js をはじめ、プログラミング言語や実行環境にはバージョンがあります。
Node.js を使ってプログラミングをする上で、Node.js のバージョン管理は非常に重要です。

なぜなら Node.js が現在も開発中のプラットフォームで、更新されていくものだからです。
それゆえ、今まで利用していた機能が次のバージョンで使えなくなるということもありえます。

どのバージョンの Node.js を利用しているのかを明確にし、必要に応じてバージョンを切り替えられる、というバージョン管理が重要なのです。

Docker を利用すればバージョン管理を容易に行うことができます。
開発の中で、もしバージョンを変更する必要が出てきたら、Docker Hub の node イメージのページから必要なバージョンを選択しましょう。

ベースとなる Docker イメージの選択

このコースでは Node.js のバージョンとして、2023 年時点での LTS(Long Term Support)、つまり安定版の 18 系を使うことにしましょう。

Dockerfile では、node:18.15.0 のように :(コロン)の後ろにバージョンを置くことで、デフォルトのイメージを指定できます

node:18.15.0Debian GNU/Linux という Linux ディストリビューションをベースにしたイメージです。

Docker の Node.js には slim というイメージを軽量化したものが準備されています。
slim を使うとコンテナのビルドなどが高速になります。 このコースでは、node:18.15.0-slim をベースの Docker イメージとして指定することにしましょう。

再掲: node イメージ

Dockerfile の用意

先ほど用意した作業ディレクトリ、つまり ~/workspace/nodejs-study の中に Dockerfile という名前のファイルを作成し、次のとおりにコピー&ペーストしましょう。
Dockerfile に拡張子はありません。

FROM --platform=linux/x86_64 node:18.15.0-slim

RUN apt-get update && \
    apt-get install -y locales git procps
RUN locale-gen ja_JP.UTF-8
RUN localedef -f UTF-8 -i ja_JP ja_JP
ENV LANG=ja_JP.UTF-8
ENV TZ=Asia/Tokyo
WORKDIR /nodejs-study

記述の意味は次のとおりです。ただしこの内容を詳しく覚える必要はありません

  • FROM ... ベースとなる Docker イメージを指定します。ここでは、先ほど決めた node:18.15.0-slim です。
  • RUN ... コマンドを実行します。ここでは、イメージに含まれていないソフトウェアのインストールや、日本語に関する設定をしています。
  • ENV ... 環境変数を設定します。ここでは、日本語やタイムゾーンに関する設定をしています。
  • WORKDIR ... 作業ディレクトリを指定します。ここでは nodejs-study を作業ディレクトリとします。

必要になったら、Dockerfile に設定を追記していきましょう。

compose.yaml の用意

続いて、Docker コンテナを起動するために便利な compose.yaml を書いていきましょう。

Dockerfile と同様に、~/workspace/nodejs-study の中に compose.yaml という名前のファイルを作成しましょう。

YAML ファイルでは、インデント(字下げ)を厳密に判定するので注意してください。
コピー&ペーストを使ってもかまいません。

version: '3'
services:
  app:
    build: .
    tty: true
    volumes:
      - .:/nodejs-study

前回記述した compose.yaml とほぼ同じですが、改めて内容を解説します。

この内容を詳しく覚える必要はありません

  • version には Compose ファイル形式のバージョンを記述します。ここでは 3 というバージョンを指定しています。
  • services の 1 つ下の階層には、全体を構成する要素(「サービス」といいます)を記述します。
    • app はサービスの名前です。サービスはコンテナに対応するので、コンテナの名前に対応すると思って問題ありません。名前の付け方は本来自由ですが、ここでは「アプリケーション」を意味する app としておきましょう。
      • build は指定したディレクトリにある Dockerfile から Docker イメージを構築するための記述です。ここでは同じ階層のディレクトリを意味する . を指定し、同じディレクトリにある Dockerfile(つまり、先ほど作成した Dockerfile)を使用するように記述しています。
      • tty は、コンテナを起動させ続けるための記述です。
      • volumes は、「マウント」と呼ばれるファイル共有の設定です。ここでは、ホスト OS(Windows や macOS)の .(同じ階層のディレクトリ)と、コンテナの /nodejs-study というディレクトリを紐づけています。

Docker コンテナの起動

node イメージから Docker コンテナを構築し、起動しましょう。

VS Code のウィンドウ中にシェルを表示させる

ここから先、VS Code 上でプログラムを書いて、Docker コンテナを開いているシェル(Windows の場合は Git Bash、macOS の場合は iTerm2)から実行することを繰り返します。

このとき、シェルも VS Code 上に表示させてしまうと便利です。

このためには、VS Code 上で Ctrl + @(Control^ + @) のショートカットキーを押しましょう。

すると、ウィンドウ右下にシェルが出現します。

VS Code 上でシェルが開けた

ここで開くシェルは、各 OS のデフォルトのシェル(Windows であれば Powershell、macOS であれば zsh)です。iTerm2 を使っていても、その裏では zsh というシェルが動いています。

Windows をお使いの方、および macOS をお使いの方でシェルを変更したい方は、「+」ボタンの隣にあるボタンを押して、シェルを選択しましょう。

シェルの選択画面

なお、VS Code で開かれるデフォルトのシェルを変更する方法もありますが、ここでは説明しません。


Git Bash へ以下を入力します。
第 2 章とは異なり、移動先のディレクトリは nodejs-study です。注意してください。

cd ~/workspace/nodejs-study
docker compose up -d

記述を間違えるなどして Dockerfile を書き直した場合は、2 行目に次のような --build オプションが必要です。

docker compose up -d --build

iTerm2 へ以下を入力します。
第 2 章とは異なり、移動先のディレクトリは nodejs-study です。注意してください。

cd ~/workspace/nodejs-study
docker compose up -d

記述を間違えるなどして Dockerfile を書き直した場合は、2 行目に次のような --build オプションが必要です。

docker compose up -d --build

Docker コンテナの構築・起動には、最初だけ数分〜十数分程度の時間がかかるでしょう。
なお、2 回目以降は数秒で起動できるようになります。

起動が完了してプロンプトが入力を受け付ける状態になったら、Docker コンテナのコンソールにアクセスしましょう。

Windows をお使いの方は、 Git Bash へ以下のコマンドを入力してください。

winpty docker compose exec app bash

このコマンドでは docker compose exec app bash の前に winpty という文字列を追加しています。

もし winpty をつけずに、docker compose exec app bash を実行すると以下のエラーが発生したり、コンソールが正常に表示されなかったりします。

the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'

このようなエラーが出る原因は、Git Bash で使用するターミナルエミュレータである MinTTY と Windows 上で起動しているアプリケーションとの間で、入出力の処理がうまくいっていないためです。

これを解消させるために、winpty という文字列を追加し、入出力の処理をうまくいくようにしています。

winpty を省略する方法

Windows の場合、Git Bash のアプリ を使っていると、上記のように winpty をコマンドの頭に補う必要があります。しかし、毎回 winpty を頭に補うのは面倒です。

この場合、次のコマンドを実行すれば、winpty を省略できます。

echo 'exec winpty bash' >> ~/.bash_profile

このコマンドを実行することで、bash そのものを winpty をつけて実行できるため、Docker コンテナを起動する際に winpty をつける必要がなくなります。

また、Windows ターミナル上や VS Code のターミナル上で Git Bash を使う場合は、winpty は不要ですので、そちらを使っても構いません。

次のコマンドを入力しましょう。

docker compose exec app bash

Docker コンテナ(Debian GNU/Linux)のコンソールが起動したでしょうか?

Docker コンテナが起動した

起動した Docker コンテナ(Debian GNU/Linux)のコンソールに次のコマンドを入力してみましょう。

node --version

このように、node コマンドにオプション --version を与えるとバージョンが確認できます。

v18.15.0

以上のように表示されたでしょうか。

Node.js を使ってみよう

今度は Node.js を動かしてみます。

node

とだけ入力すると、

Welcome to Node.js v18.15.0.
Type ".help" for more information.
>

と表示され、コンソールが入力を受け付ける状態になります。
これは REPL という機能のプロンプトです。

REPL

REPL(レプル)とは Read-Eval-Print Loop(リード・イーバル・プリント・ループ)の略称で、入力したコードをその場で実行して、結果を表示するツールです。
第 1 章で Chrome のデベロッパツールのコンソールを使い JavaScript を試した環境と同じようなものです。

試しに、

2 * 3

以上を入力して、2 かける 3 を計算させてみましょう。

6

と計算結果が表示されます。

REPL は、 Ctrl + c を二度押すことで終了できます。
終了せてみましょう。

>
(To exit, press Ctrl+C again or Ctrl+D or type .exit)
>

これで、通常のシェルのコマンド入力画面に戻ります。

Node.js のプロジェクト

Node.js は、先ほどのように REPL で動かすこともできますが、プログラムをファイルにまとめて書いて動かすこともできます。

HTML の時と同じように、プロジェクトディレクトリを用意して編集を開始しましょう。

cd /nodejs-study
touch app.js

以上のコマンドを実行します。
app.js という、JavaScript ソースコードを書くファイルを作成しています。

合計を計算するプログラム

ここまでできたら、プログラムを編集していきます。

VS Code の左のファイル一覧(エクスプローラー)から app.js を選択し、次のように編集してみましょう。

'use strict';
const number = process.argv[2] || 0;
let sum = 0;
for (let i = 1; i <= number; i++) {
  sum = sum + i;
}
console.log(sum);

これは、「1」から「コマンドライン引数で与えられた数」までを合計して出力するプログラムです。
コマンドライン引数とは、シェルからコマンドを実行するときに、コマンドと一緒に書いた引数をプログラムに渡す仕組みのことです。
詳しくは、下で説明します。

では、コードを細かく見ていきましょう。

'use strict';

この部分は、JavaScript を Strict モードで利用するための記述です。

const number = process.argv[2] || 0;

このコードの number = process.argv[2] の部分は、number という定数に、process.argv[2] の値を代入しています。
process.argv は Node.js がデフォルトで提供してくれる、コマンドライン引数が入った配列です。

なぜ添字に 2 番を使っているかというと、
0 番には node コマンドのファイルのパスが入り、
1 番には実行しているプログラムのファイルのパスが入る、という決まりがあるためです。
そのため、コマンドの後ろに書いた最初の引数は process.argv[2] となるのです。

例えば

node app.js 100 200

というコマンドで引数 2 つを指定して app.js を起動した場合、

process.argv[0] = '/usr/local/bin/node'   //nodeのパスの例
process.argv[1] = '/nodejs-study/app.js'  //app.jsのパスの例
process.argv[2] = '100'                   //コマンドライン引数の 1 つ目
process.argv[3] = '200'                   //コマンドライン引数の 2 つ目

の 4 つが配列の形でプログラムに渡されます。

では、プログラムの解説に戻りましょう。
また、下のコードでは || を普通の式の中で使う書き方が、初めて出ています。

const number = process.argv[2] || 0;

このコードが実行されると、process.argv[2] が 未入力の場合、number には 0 が代入されます。

選択的代入

なぜこんなところで、論理和の論理演算子 || を使ったのでしょうか。

論理和は、先に左側の値を見て truthy であれば、その値を結果として使います。
+そして左側の値が falsy 、つまり 0 や null、undefined などであれば、その右側の値を結果として使う、という特性があります。

その特性を利用して、選択的な代入をしているのです。

試しに

node

以上のコマンドで REPL を起動して、

null || 1;
undefined || 1;
0 || 1;
2 || 1;

それぞれ評価してみましょう。すると、

1
1
1
2

と表示されたはずです。

上の 3 つでは全て、左側の値が falsy なので、右側の値 1 が結果になっています。

それに対して最後の 1 つでは、左側の値が truthy なので、左側の値 2 が結果になっています。

const number = process.argv[2] || 0;

つまりこれは、コマンドライン引数が指定されていればその値、 そうでなければ 0 を変数 number に代入するというコードなのです。

let sum = 0;
for (let i = 1; i <= number; i++) {
  sum = sum + i;
}
console.log(sum);

この部分は、以前にも練習したよくある for 文です。
1 から number までの数字までを順に足して合計し、最後に sum の値を出力しています。

ここまでできたら、Ctrl + c を 2 回押して REPL を終わらせておきましょう。

Node.js プログラムの実行

プログラムを実行しましょう。
以下のコマンドを入力します。

node app.js 100

結果として

5050

が表示されれば成功です(1 + 2 + 3 + ... + 100 = 5050 です)。
これで、 Node.js を利用したプログラミングができるようになりました。

truthy と falsy

今まで学んできたように、JavaScript における論理には truefalse がありました。 また、数値や文字列などの値の存在も学んできました。

さて、数値や文字列自体を条件式として使ってしまうとどうなるのでしょうか?

すなわち、

let text = "あいうえお";
if (text === "あいうえお" ){
  console.log("trueと判定されました");
}

などではなく、

let text = "あいうえお";
if (text){
  console.log("trueと判定されました");
}

のように、比較演算子を使うのではなく文字列や数値自体を if 文で判定しようとする場合です。 一見するとエラーが起きそうですが、実は JavaScript はこういった値も勝手に true か false に変換してプログラムを実行するため、エラーなく実行されます。

こういった状況で true に変換される値を truthy (トゥルーシー), false に変換される値を falsy (フォールシー)といいます。
JavaScript においては falsy と決められているもの以外は truthy です。


truthy な値 falsy な値
true
0 以外の数値
1 文字以上含まれている文字列(string)
オブジェクト
コレクション
関数
など
false
0
""(1 文字も含まれていない文字列(string))
null
undefined
NaN

これで今回の Node.js プログラムの実行は終了です。
Docker コンテナを終了・破棄しましょう

コンテナの終了・破棄手順

  1. Docker コンテナ(Debian GNU/Linux)のコンソールから抜けるために、次のコマンドを入力します。
exit
  1. コマンドを入力する場所の左側(プロンプト)が
    Windowsログインユーザ名 @ Windowsコンピューター名 MINGW64 カレントディレクトリ $
    に戻っているのを確認したら、次のコマンドを入力します。
docker compose down
  1. Docker コンテナ(Debian GNU/Linux)のコンソールから抜けるために、次のコマンドを入力します。
exit
  1. コマンドを入力する場所の左側(プロンプト)が
    ユーザ名@コンピューター名 カレントディレクトリ %
    あるいは
    コンピューター名:カレントディレクトリ ユーザ名$
    に戻っているのを確認したら、次のコマンドを入力します。
docker compose down

GitHub へのプッシュ

最後に今のコードを、GitHub に上げましょう。

  1. https://github.com/ にアクセスし、「New repository」をクリックします
  2. nodejs-study という名前で「Create repository」をクリックします

ここで 「 …or push an existing repository from the command line 」以下に表示されたコマンドをひかえておきましょう。

GitHub のリポジトリの作り方を確認する

GitHub にリポジトリができたら、次はローカルのコンソールで Git リポジトリを作成し、コミットしましょう。

cd ~/workspace/nodejs-study
git init
git add .
git commit -m "first commit"

その後、先ほどひかえておいたコマンド

git remote add origin git@github.com:あなたのユーザ名/nodejs-study.git
git branch -M main
git push -u origin main

を実行します。
これで、あなたの書いたコードは GitHub で管理されるようになりました。

まとめ

  • Node.js は、サーバサイドプログラミングができるプラットフォーム
  • 特定の Node.js バージョンの Docker イメージを指定することで、Node.js のバージョン管理ができる。
  • Node.js は REPL で実行することも、ファイルに書いたプログラムの実行もできる
  • 論理和 の演算子||は、選択的代入に利用できる

練習

Node.js で、1 以上の自然数の階乗を求める関数を実装してみましょう。
なお、階乗とは 1 からその与えられた自然数までの数を全てかけたものです。たとえば 5 の階乗は、5 * 4 * 3 * 2 * 1 で、120 になります。
GitHub の練習問題リポジトリをフォークして、 正解のプルリクを送ってください。

まず GitHub 上でフォークし、自分の intro-curriculum-3001 リポジトリをローカルに clone してはじめましょう。

intro-curriculum-3001 のフォークボタン

clone のしかたを確認する

Windows の方は Git Bash、macOS の方は iTerm2 に次のコマンドを入力します。

cd ~/workspace
git clone git@github.com:あなたのユーザ名/intro-curriculum-3001.git
cd intro-curriculum-3001
code .
docker compose up -d
docker compose exec app bash

このようにリポジトリの内容をローカルにクローンすることで、自分の手元で編集ができるようになります。
VS Code で、intro-curriculum-3001 フォルダを開き、 app.js の中身が下記の通りになっていることを確認しましょう。

'use strict';
/**
 * 与えられた自然数の階乗を返す
 * 階乗とは、1からその与えられた自然数までの数をすべてかけたものです
 * @param {Number} n
 * @returns {Number}
 */
function factorial(n) {
  let result = 1;
  // TODO このコメントを消して正しく実装してください。
  return result;
}
const assert = require('node:assert');
assert.strictEqual(factorial(1), 1, `1の階乗は1ですが、実際は${factorial(1) }でした`);
assert.strictEqual(factorial(2), 2, `2の階乗は2ですが、実際は${factorial(2) }でした`);
assert.strictEqual(factorial(3), 6, `3の階乗は6ですが、実際は${factorial(3) }でした`);
assert.strictEqual(factorial(10), 3628800, `10の階乗は3628800ですが、実際は${factorial(10) }でした`);
console.log('すべてのテストを通過しました');

factorial が階乗を計算する関数です。
この関数が未完成の状態になっていますので、正しく階乗を計算して返すようにコードを書いて完成させてください。


const assert = require('node:assert');

この部分は Node.js が持つアサーションという機能を、オブジェクトとして読み込む記述方法です。詳しくはこの後の回で説明していきます。

ここで使われている `バッククォーテーション)で囲まれている文字列は、 ${プログラム内の値} という形式の文字列を含めることで、 変数の値を埋め込むことができる Template Literal(テンプレート・リテラル)という機能です。

実装が完了したらファイルを保存し、Docker コンテナ(Debian GNU/Linux)のコンソールで次のコマンドを実行しましょう。

cd /intro-curriculum-3001
node app.js

を実行してください。
すると、コードの後半に書かれている assert によるテストが実行されます。

間違っている場合には、

node:assert:123
  throw new AssertionError(obj);
  ^

AssertionError [ERR_ASSERTION]: 2の階乗は2ですが、実際は1でした

以上のように間違っていることが表示されます。

全てのテストに成功した場合は

全てのテストを通過しました

と表示されます。
全てのテストが通るようになったら、GitHub へ push し、プルリクを作成しましょう。

練習の答え

 function factorial(n) {
   let result = 1;
-  // TODO このコメントを消して正しく実装してください。
+  for (let i = 1; i <= n; i++) {
+    result = result * i;
+  }
   return result;
 }

以上が、実装の解答例です。

実装後は、

node app.js

でテストします。

コンソールに以下のように表示されていればテストを通過しています。

全てのテストを通過しました

テストを通過していることを確認できたら GitHub リポジトリへプッシュしましょう。

まず、Docker コンテナのコンソールを抜けるために

exit

を入力して Windows または macOS のコンソールに戻ったら

git add .
git commit -m "階乗関数の実装"
git push origin main-2023

これで GitHub のリポジトリに反映できます。

その後、「 New pull request 」ボタンからプルリクを作ることができます。

プルリクエストのしかたを確認する

自分が考えた答えをプルリクで送ってから、他の人のプルリクなども見てみましょう。

学習が完了したら、Docker コンテナを終了・破棄しておきましょう。 Docker コンテナの終了・破棄手順

お疲れさまでした!

学習したことをSNSで報告しよう!

プログラミングコースのよくある質問ページはこちら

N 予備校プログラミングコース FAQ・トラブルシューティング

お知らせ

Webページコンテスト

N予備校では、N予備校プログラミング入門コースで学んだ方々がプログラミングの成果物を競うコンテストを年 2 回(夏・冬)開催しています。

夏のコンテストは例年8月ごろ、冬のコンテストは例年 1 月ごろにそれぞれ開催しています。

N予備校 Web アプリコンテスト 公式サイト

アドベントカレンダー2023

N予備校では、毎年 12 月にアドベントカレンダーを開催しています。
N予備校プログラミングコースやプログラミングに関わる内容であれば、どなたでもご参加いただけます。

アドベントカレンダー2023

N予備校 IT企業内定報告・内定体験記アンケート

N予備校では、プログラミングコースまたはWebデザインコースを受講し、みごと IT企業 に内定されたN予備校会員またはN高生S高生、N中等部在学生に、内定された企業1社につき(最大5社)Amazonギフト券 1,000円 を進呈いたします。
また、内定体験記まで記載いただいた方には追加で Amazonギフト券 5,000円 を進呈いたします。

詳しくはN予備校 IT企業内定報告・内定体験記アンケートページをご確認ください。