WEBSYSスタッフ日誌

国立大学法人電気通信大学社会人履修証明プログラムWEBSYSの公式スタッフブログです。単なる学び直しで終わらせません!最新情報を発信いたしますので、フォローをお願いします。ご不明点等についてはメール、DM📩にてお気軽にお問い合わせ下さい。

手軽にKubernetes学習環境を構築する

はじめに

はじめまして。スタッフの平地です。

ウェブシステムデザインプログラムでは、コンテナ技術や仮想化技術なども含めウェブシステムの基盤を支える技術についても扱います。 今回はその中でもKubernetesについてご紹介します。

学習をするためハードルが高いと思われがちなKubernetesですが、今回はminikubeというツールを使って手軽に手元のPCで学習環境を構築する方法を紹介します。

Kubernetesとは?

最近のウェブシステムでは、Dockerなどを初めとしてコンテナ技術を用いた環境を用いることによって開発環境や実行環境を仮想化する技術が注目されています。 コンテナ技術によって、開発者間で開発環境を統一することができたり、作成したアプリケーションをイメージとして配布したりなど様々なメリットが存在します。 コンテナ技術によって仮想化されたアプリケーションを実際に本番サービスとして運用する際に重要となってくるのが、コンテナ上で動くアプリケーションの管理(コンテナオーケストレーション)です。

Kubernetesは元々Googleによって開発された、コンテナ化された複数のアプリケーショを管理するためのシステムです。Kubernetesは分散システムであり、システム全体として負荷に応じたスケーリングや障害発生時のセルフヒーリングといったような仕組みを持っています。 また、Kubernetesを利用することによって、アプリケーションの自動デプロイ(CD)やInfrastructure as Code(IaC)を実現することができます。

今回はGCPAWSなどが提供するGKEやEKSといったようなマネージドKubernetesを利用することなく、手元の環境だけで手軽にKubernetesの学習環境を構築する方法をご紹介します。

minikubeを用いたKubernetesクラスタの構築

学習用にKubernetesクラスタを構築する方法はいくつかあますが、今回はその中でも手軽なminikubeと呼ばれるツールを用いた方法をご紹介します。

Dockerのインストール

minikubeはデフォルトでDockerを用いて、ホスト上にKubernetesクラスタの構築を行います。 そのため、あらかじめ手元の環境にDockerがインストールされている必要があります。 もし、インストールしていない場合は以下の手順に従ってDockerをインストールしてください。

ここではDocker Desktopを用いてインストールします。 Docker DesktopはWindowsMac上でDocker環境を構築できるツールです。 公式サイトにアクセスしてお手元の環境に合ったものをインストールしてください。

Macをお使いの場合は、Intel版とApple Chip版の2種類がありますのでご注意ください。 Windowsの場合は、インストール時にWSL2の有効化が必要な場合がありますのでこちらを参考に設定してください。

minikubeのインストール

minikube公式サイトからインストールします。 利用する環境を選択するだけでセットアップ方法が出てきますので、手順に従ってインストールしてください。 Apple Siliconが搭載されているMacを利用している場合はArchitectureをARM64にしてください。

M1 Macの場合は以下のようになります。

$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-arm64
$ sudo install minikube-darwin-arm64 /usr/local/bin/minikube

インストール完了後に以下のようにminikubeコマンドが利用できれば大丈夫です。

$ minikube version
minikube version: v1.31.1
commit: fd3f3801765d093a485d255043149f92ec0a695f

Kubernetesクラスタの構築

無事にインストールが完了したら、Kubernetesクラスタを構築していきます。 以下のコマンドだけでクラスタを構築できてしまうのがminikubeの凄いところです。

$ minikube start

絵文字付きで状況が表示され、最後の行に

Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

と表示されていたら構築完了です。

$ minikube kubectl get nodes
NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   4m    v1.27.3

のようにしてみると無事にクラスタが構築できていることが確認できます。

Kubernetesクラスタを使ってみる

せっかくなので実際に構築したクラスタを使って、Webサーバーをデプロイしてみます。

以下のようなファイルを作成してnginx-sample.yamlとして保存してください。

apiVersion: v1
kind: Service
metadata:
  name: nginx-sample
spec:
  selector:
    app: nginx-sample
  type: LoadBalancer
  ports:
  - port: 3000
    targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-sample
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-sample
  template:
    metadata:
      labels:
        app: nginx-sample
    spec:
      containers:
      - name: nginx-sample
        image: nginx:1.14.2
        ports:
        - containerPort: 80

次に以下のコマンドを実行します。

$ minikube kubectl -- apply -f nginx-sample.yaml
service/nginx-sample created
deployment.apps/nginx-sample created

10秒ぐらい待ってから以下のコマンドを実行してみて、podのSTATUSがrunningになってたらデプロイ成功です。

$ minikube kubectl get all
NAME                                READY   STATUS    RESTARTS   AGE
pod/nginx-sample-55c84c754b-dqrqn   1/1     Running   0          56s

NAME                   TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
service/kubernetes     ClusterIP      10.96.0.1     <none>        443/TCP          77m
service/nginx-sample   LoadBalancer   10.97.19.75   <pending>     3000:32149/TCP   56s

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-sample   1/1     1            1           56s

NAME                                      DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-sample-55c84c754b   1         1         1       56s

実際にWebページが表示されるか確認してみます。 以下のコマンドを実行してください。

$ minikube tunnel
✅  トンネルが無事開始しました

📌  注意: トンネルにアクセスするにはこのプロセスが存続しなければならないため、このターミナルはクローズしないでください ...

🏃  nginx-sample サービス用のトンネルを起動しています。

プロセスが起動している状態で、ブラウザ上でhttp://localhost:3000にアクセスしてください。無事にWelcome to nginx!が表示されていたら成功です!

最後に

Kubernetesはハードルが高いと思われがちですが、今回紹介したminkubeのようなツールを使うことで気軽に環境構築することが可能です。 Kubernetesには非常に多くの活用方法があるので、興味があれば是非学習してみてください! minikubeのサイトKubernetes公式サイトにも色々な情報が掲載が掲載されています。

参考

[1]. KubernetesKubernetes
[2]. minikube 「minikube start | minikube

人工知能とは

はじめに

初めまして、スタッフの小林です。

最近はChatGPTが話題ですね。今までの対話型AIとは異なり、幅広い分野の質問に違和感なく回答できることから注目を集めています。ChatGPTを開発したのはアメリカのOpenAIという企業ですが、日本でもNECが日本語に特化した生成AIを開発し、企業向けにサービスの提供を開始したようです。独自の生成系AIの開発を巡って他の企業も開発に乗り出していて、競争が激しくなっています。

そんな人工知能(Artificial Intelligence, AI)ですが、「人間っぽい知能をもつ何か」みたいなイメージはあるものの、どういうものなのかよくわからないという方は多いかと思います。私もまだまだ勉強中の身ではありますが、今回はそんな人工知能について紹介していきたいと思います。

人工知能とは

人工知能は一般に話題になったのは最近ですが、実際には1950年代から研究が進められてきました。その目的は「認知や判断、推論といった人間が備える知能と同等のものを人工的に再現すること」と言うことができるでしょう。しかしながら私の知る限りでその明確な定義は定まっておらず、広い範囲を持つ概念となっています。皆さんがよく耳にする機械学習(Machine Learning, ML)や深層学習(Deep Learning, DL)も人工知能を構成する具体的な手法の1つです。人工知能といえば、機械学習や深層学習が挙げられますが、これらの他にも特定の事象に対する動作を列挙したルールベースの手法も人工知能の1つだと言うことができます。

機械学習と深層学習

人間と同等の知能を再現するにあたり、「認知」や「識別」とはどうゆう状態なのかが重要となります。なぜならばそれらを人工的に再現するには、そのメカニズムの解明とアルゴリズムへの置き換えが必要となるためです。そして、ある物体や概念、具体的に机を認識することは、様々な物体があるなかで机とそれ以外の物体を分けることを指すと考えられるようになりました。その考えに基づき、機械学習は与えられたデータをその特徴に基づいて分離することが大まかな目標となっています。具体的には、多くの机と椅子の画像が与えられた中で、机の画像が持つ特徴と椅子の画像が持つ特徴に基づいて机と椅子の画像を分割し、机と椅子を識別します。

現在では統計学的な背景や生物学的な背景に着想を得て、様々な機械学習のモデルが考えられています。このモデルというのはその機械学習を構成する要素とアルゴリズムを指します。すなわち、モノを識別するのにあたり、どのような要素があり、どうやって識別するのかです。続いて、いくつか有名な機械学習モデルを挙げていきたいと思います。皆さんも聞いたことのあるものがあるかもしれません。

上記に挙げたものは機械学習モデルの一部でしかありません。また、ニューラルネットワークの1分野として深層学習も有名です。すなわち、深層学習は機械学習の1分野と言うことができます。そして、深層学習はGANや昨今話題のChatGPTと密接に関わっており、奥が深い分野でもあります。

おわりに

今後はさらに個々の機械学習モデルや機械学習の方法論についての話を掘り下げていければいいと思います。

最後まで読んでいただきありがとうございました。

参考

[1]. テレ朝news「NEC独自の"生成AI"サービス提供開始

[2]. Google人工知能(AI)と機械学習(ML)の比較

[3]. NVIDIA人工知能、機械学習、ディープラーニングの違いとは

[4]. 株式会社電算システム「機械学習・AI(人工知能)・ディープラーニングの違いを解説!

OSによってコマンドが違う?

はじめに

初めまして、WEBSYSスタッフの本郷です。

今回ご紹介するのは、ファイル操作に関するコマンドです。LinuxMacではターミナル、Windowsではコマンドプロンプト上でファイルを操作する際の命令やオプションがあります。この命令(コマンド)はOSによって異なる部分があります。この記事では主にMacWindowsを比較しています。初歩的な内容ではありますが、PCの買い替えなどでOSを変えたときや、OSの異なる人たちとのプロジェクト作成において、少しでも助けになればと思います。

 

主なファイル操作コマンド

MacWindowsのファイル操作コマンドの一部が以下の表になります。

  Mac Windows
ファイル一覧表示 ls dir
ファイルやディレクトリの移動 mv [from] [to] move [from] [to]
ファイルの名前変更 mv [old] [new] ren [old] [new]
ディレクトリの名前変更 mv [old] [new] move [old] [new]
ディレクトリ,ファイルのコピー cp copy
ディレクトリの作成 mkdir md (mkdir)
ディレクトリの削除 rmdir rmdir
ファイルの作成 touch copy nul (type nul)
ファイルの削除 rm del
ディレクトリの移動 cd cd (chdir)
ファイルの中身表示 cat type
ファイルを開く open [file name] [fail name]

 

WindowsのコマンドがMacと異なるものがいくつかあります。ファイルを開くコマンドはWindowsではありません。ファイル名を入力するとファイルを開くことができます。さらに、MacWindowsでは実行した際の見え方も異なります。以下で詳しく説明します。

 

ディレクトリ・ファイルの一覧表示の差

Macでは"ls"、Windowsでは"dir"コマンドです。実行した際の違いを見てみましょう。

Mac “ls”を実行

Mac_ls実行例

Windows “dir”を実行

Windows_dirを実行

Macではディレクトリ名だけが表示されているのに対し、Windowsでは、ディレクトリ名だけでなく更新日時も表示されます。Macでこのような表示をするには、オプションをつける必要があります。”-la”というオプションをつけるとWindowsの日時表示に加え、所有者や許可項目が表示されます。

“ls -la”を実行

Mac_ls-la実行

一方、Windowsでファイル名だけを出力するには”/B”というオプションをつけます。

“dir /B”を実行

Windows_dir/Bを実行

 

オプション

一つのコマンドに対して、様々なオプションをつけることができます。ここでは、一部をご紹介します。

Mac

ls  -a 隠しファイルも含めて表示
 -l 詳細を表示
 -la 隠しファイルを含めた詳細を表示
cp  -r ディレクトリの中身もコピー
rm  -r ディレクトリとその中身を削除
 -f 警告なしで削除
 -rf 警告なしでディレクトリとその中身を削除
cat  -n 行番号をつけて表示
 -b 空行以外に行番号をつけて表示

 

Windows

dir /A 指定 /Aの後に指定する文字によって、表示したいものを絞れる
D:フォルダ
R:読み取り専用ファイル
H:隠しファイル
A:アーカイブファイル
S:システムファイル
指定なし:隠しファイル含めすべて表示
/B ファイルのみ表示
/Q 所有者を表示
rmdir /S ディレクトリとその中身を削除
/Q /Sオプション指定時に表示される警告を表示しない

また、Windowsでのディレクトリとその中身をコピーは’xcopy’で実行できます。

 

最後に

ご紹介したコマンド以外にも様々なコマンドがMac,Windowsともにあります。また、オプションもまだまだあります。

 

よく使うコマンドのオプションを知っておくとより快適に操作できるかもしれません。

 

最後まで読んでいただきありがとうございました。

VPNってなんだろう?

はじめに

はじめまして。スタッフの並木です。

ウェブシステムデザインプログラムでは受講生一人一人に一台の仮想マシンを割り当て、それを演習に利用してもらっています。この仮想マシンを利用するには、電通大のネットワークから仮想マシンへアクセスする必要があります。 簡単に言えば大学構内で大学のWifiに繋いで仮想マシンにアクセスしなければいけないということです。 しかし、受講生の方々の多くは社会人で、平日は電通大に来られない方も多いかと思います。 そうなると、実質的に講義がある土曜日しか仮想マシンを使うことができず、あまりに不便です。 ウェブシスに限らず、電通大の学生も学内からのアクセスが必要な計算機を授業の演習で利用することがあるので、自宅から簡単にアクセスできるように電通大VPNというものを整備しています。 VPNのおかげで、受講生の方々に簡単に仮想マシンを利用してもらえていますし、筆者含め本学の学生もコロナ禍によるオンライン授業の演習で、学内の計算機を遠隔で使用できていたのでVPNのありがたみを感じるばかりでした。 今回はそんなVPNについて、基本的な内容ではありますが紹介したいと思います。

VPNとは

VPNVirtual Private Networkの頭文字をとったもので、訳すと「仮想専用回線」になります。 書いて字のごとく、仮想的に専用のネットワークを作る技術になります。 VPNはその性質から様々な用途に利用されています。 今では様々なVPNサービスが登場し、一般人の手が届く技術にはなりましたが、登場した当初のモチベーションは「拠点間の専用回線を敷設したい」というものでした。 しかし、新たに専用回線を敷設するのには初期投資の面でも、また維持の面でもコストパフォーマンスが悪いです。 そこで、うまいことインターネットのインフラを利用できないかと考えられたものがインターネットVPNと呼ばれるものです。

つまりVPNとは一般に「インターネット上に存在する専用回線」と言えばよいでしょう。

VPNの用途

VPNは色々な用途で利用されていると記述しましたが、例えば以下に列挙するものに利用されています。

  • 拠点間通信
    • VPNのもともとのモチベーションでしたね。
  • リモートアクセス
    • 組織外のネットワークから組織内のネットワークにアクセスすること。VPNサーバを組織内ネットワークに設置し、これを経由する通信を行います。電通大VPNもこれに該当します。
  • ジオブロック回避
    • 特定地域からしかアクセスできないオンラインサービスにその地域外からアクセスすること。VPNサーバをその地域内に設置し、これを経由する通信を行います。

VPNの形態

VPNは接続の方法という観点で大きく3つに分けることができます。

拠点間VPN

拠点間通信の際に用いられます。それぞれの拠点にあるVPNゲートウェイどうしを接続して通信を行います。

拠点間VPN

サーバ・クライアント方式のVPN

リモートアクセスやジオブロック回避に用いられ、クライアント(スマホやPC)からVPNサーバに接続し、VPNサーバに通信を中継してもらいます。

サーバ・クライアント方式

メッシュ型VPN

こちらはWireguardと呼ばれる比較的新しいオープンソースVPNプロトコルで、ネットワークに参加しているコンピュータどうしを直接接続するものです。派生のVPNソフトウェアも存在し、独自の名称で展開されているものもあります。筆者はTailscaleというWireguardベースのVPNソフトを利用しています。

メッシュ型VPN

VPNの安全性

VPNは通信を暗号化するから安全!」という文言を見たことはないでしょうか。見たことが無かったら少しに気に留めていただければと思います。 例えば、家電量販店でのPCコーナーに置いてあるセキュリティソフトのパッケージなんかに書いてあると思います。 そして、本当に安全なのかというと半分本当で、半分嘘といった感じです。 実際にVPNによる通信は暗号化されます。そもそも、公衆のインフラを使って通信を行うのだから暗号化してもらわないと困ります。 新しいインフラを整備する代わりに通信データを暗号化することで、通信に関与しない者にはデータの内容がわからないようにしています。 だから安心!となるわけではなく、データが暗号化される範囲に注意が必要です。 暗号化通信では、送出元で暗号化されたデータは通信相手によって復号(元のデータに戻)されます。 我々がよく利用するであろうサーバ・クライアント方式のVPNの場合、通信データは我々が利用するスマホ・PCで暗号化され、VPNサーバで復号されます。 特に強調もしなかったのですが、VPNサーバは基本的に通信の中継を行うものであり、データの安全な配送はVPNサーバに到達するまでの範囲内です。 VPNサーバ通過後にデータが暗号化されるかは利用するオンラインサービス次第です。

通信データが暗号化される範囲
もっとも、Webに関して言えばいまどき暗号化されないhttp通信はあまり見かけなくはなってきてますし、http通信をしようとするとブラウザが警告を表示することが多いので、通信がサイトを公開しているサーバまで暗号化されるhttps通信が実質的に必須になってきています。

参考

[1] ITMediaVPN実践導入講座 第2回 インターネットVPNの基礎

[2] Avery Pennarun, "How Tailscale works"

快適なSSHライフを送るための設定

はじめに

はじめまして。WEBSYSスタッフの大塚です。

ウェブシステムデザインプログラムでは、演習環境として受講生一人一人に専用のコンピュータ (仮想マシン) を提供しています。 この仮想マシンにログインする方法のひとつが、SSHというものです。

今回は「快適なSSHライフ」と題して、SSHの便利な設定をいくつか紹介したいと思います。 紹介する内容は以下の通りです。

想定環境

以降の設定例では、以下の環境を想定して説明していきます。

  • クライアント (ログインする側)
    • OS: Windows 11 21H2
    • ユーザ名: taro
  • サーバ (ログインされる側)
    • OS: Ubuntu 20.04.4 LTS
    • IPアドレス: 192.0.2.1 *1
    • ユーザ名: risaju *2
    • 認証方法: パスワード、または鍵ファイル

macOSのPCが手元にないため確信を持てないのですが、どのOSでも同様に設定できると思います。

基本的なログイン

まずは何も設定しない状態でログインすることを考えてみます。 なお、以下の実行例はコマンドプロンプトで行ったものです。

C:\Users\taro>ssh risaju@192.0.2.1
risaju@192.0.2.1's password:

ユーザ名とIPアドレス、そしてパスワードを打つ必要がありますね。

設定ファイルの作成

設定の第一歩として、設定ファイルを作成してみましょう。

C:\Users\taro\.ssh\config という場所に、以下の内容でファイルを作成します。

Host myserver
    Hostname 192.0.2.1
    User risaju

上の設定ファイルを作成すると、ログインするコマンドは以下の通りになります。

C:\Users\taro>ssh myserver
risaju@192.0.2.1's password:

ユーザ名とIPアドレスmyserver という名前に置き換えることができました。 もちろん、この名前は設定ファイルを編集することでお好きなものに変えられます。

鍵ファイルの生成

設定ファイルによって打つ項目の数は減りましたが、それでもパスワードを毎回求められるのはなかなかの手間です。

そこで鍵ファイルとssh-agentというものを使い、認証の手間を減らしてみましょう。

まずは以下のコマンドで鍵ファイルを生成します。

C:\Users\taro>ssh-keygen -C myserver+20230526@myclient
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\taro/.ssh/id_rsa): C:\Users\taro\.ssh\id_rsa_myserver
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
...

コマンドに -C myserver+20230526@myclient と付けると、鍵ファイル内のコメントを変更できます。 ここでは サーバの名前+日付@クライアントの名前 の形式にして、他の鍵ファイルと区別しやすくしました。

コマンドを実行すると、保存先と鍵ファイルに設定するパスワードを聞かれるので適宜入力します。 パスワードは無しにすることもできますが、セキュリティのために設定することを強くおすすめします。

鍵ファイルが生成できると、C:\Users\taro\.ssh の中に2つのファイルが作成されます。

  • id_rsa_myserver: 鍵の本体です。パスワードと同等なものなので、流出しないよう注意しなくてはなりません。
  • id_rsa_myserver.pub: 鍵が合っているか確認するための情報です。サーバに対して設定する際に使います。

鍵ファイルによる認証

鍵ファイルをパスワードの代わりとして使うには、サーバに鍵の情報を置いておく必要があります。

具体的には、以下の手順を行います。

C:\Users\taro>scp .ssh\id_rsa_myserver.pub myserver:
risaju@192.0.2.1's password:
id_rsa_myserver.pub                                                                   100%  581    29.9KB/s   00:00

C:\Users\taro>ssh myserver
...
risaju@myserver:~$ mkdir .ssh
# 次のエラーが出たとしても問題ありません
mkdir: ディレクトリ `.ssh' を作成できません: ファイルが存在します
risaju@myserver:~$ chmod 700 .ssh
risaju@myserver:~$ cat id_rsa_myserver.pub >> .ssh/authorized_keys
risaju@myserver:~$ rm id_rsa_myserver.pub

上の手順では、id_rsa_myserver.pub の内容をサーバにある ~/.ssh/authorized_keys というファイルに追記しています。

実はこれをまとめて行うssh-copy-idというコマンドがあるのですが、残念ながらWindowsmacOSには標準で入っていないようでした。

サーバに鍵の情報を置いた後は、鍵ファイルの場所を設定ファイル (C:\Users\taro\.ssh\config) に追記して設定完了です。

Host myserver
    Hostname 192.0.2.1
    User risaju
    IdentityFile ~/.ssh/id_rsa_myserver

設定が完了すれば、次回からは鍵ファイルのパスワードを求められるようになるはずです。

C:\Users\taro>ssh myserver
Enter passphrase for key 'C:\Users\taro/.ssh/id_rsa_myserver':

ssh-agentの利用

単に鍵ファイルを設定するだけでは、聞かれるパスワードが変わるのみで手間が減っていません。

しかしssh-agentと組み合わせれば、パスワードを解除した後の鍵を覚えさせることでログインの手間を省くことができます。

Windowsではssh-agentが無効化されているので、有効化するところから始めます。 なお、以下の sc コマンドは管理者権限で実行してください。

C:\Users\taro>sc config ssh-agent start= auto
[SC] ChangeServiceConfig SUCCESS

C:\Users\taro>sc start ssh-agent

SERVICE_NAME: ssh-agent
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 12980
        FLAGS              :

ssh-agentが利用可能になると、以下のようにして鍵を覚えさせることができます。

C:\Users\taro>ssh-add .ssh\id_rsa_myserver
Enter passphrase for .ssh\id_rsa_myserver:
Identity added: .ssh\id_rsa_myserver (myserver+20230526@myclient)

この状態でログインすれば、パスワードを求められることはありません。

C:\Users\taro>ssh myserver
...
risaju@myserver:~$

ちなみにWindowsの場合、ssh-agentは再起動後も鍵を覚えたままになっています。 覚えさせた鍵を取り除くには、以下のコマンドを実行します。

# 特定の鍵を取り除く
C:\Users\taro>ssh-add -d .ssh\id_rsa_myserver
Identity removed: .ssh\id_rsa_myserver (myserver+20230526@myclient)

# 全ての鍵を取り除く
C:\Users\taro>ssh-add -D
All identities removed.

おわりに

今回はSSHの便利な設定として、設定ファイルから鍵ファイル、ssh-agentについて紹介しました。

SSHには他にもポートの転送といった便利な機能がありますが、それはまた別な機会に紹介できればと思います。

他の方々のブログでもよく取り上げられている内容だったと思いますが、どなたかのお役に立てれば嬉しいです。

*1:例示用として定められているので、試しても繋がりません。

*2:電通大のキャラクターから名前をお借りしました。

Webアプリを作るために必要なもの

はじめまして、WEBSYSスタッフの大高です。

業務内でwebアプリを作ってみようということになりました。ほぼ未経験なので、webアプリを作るために必要なものを調べてみたことを書いてみようと思います。

今の自分の知識についてですが、学校の授業ではHTML、CSSの他、少しJavaScriptを扱っていました。また、別な組織でホームページを運営しており、そちらでHTMLとCSSを使って更新していました。サーバー等は大学が用意しているものを使っていたので、全体的な知識は毛が生えた程度です。

プログラミング言語

アプリを作る際にはプログラミングが必要です。以前ホームページを運営していたときは情報を公開するだけだったのでHTMLのみ使っていましたが、webアプリを作るとなると複雑な処理が必要になり、HTMLだけでは足りません。JavaScriptはあまり覚えていないですが、Cなどの知識はあるのでなんとかなりそうです。ちなみにウェブシステムデザインプログラムではPythonを学習していきます。

言語によって得意な処理が異なるため、複数利用する場合もあるようです。特に、見た目の処理を行うためのプログラムと、サーバーで処理を行うためのプログラムで分けることがあるようです。

フレームワーク

フレームワークを導入するとプログラムが簡単になるみたいです。プログラムの処理の基本的な流れが決まっている場合、処理を自分ですべて書くのではなく、フレームワークにある程度任せてしまうことで簡単に開発を行えるようになります。

これは利用する言語ごとに対応するフレームワークがあります。

ウェブシステムデザインプログラムではPythonに対応しているDjangoというフレームワークについて学習していきます。

Pythonのライブラリと同じイメージなのかと思いましたが、厳密には違うようです。例えば、JavaScriptにはReactというライブラリがありますが、これはライブラリなのでフレームワークよりも比較的自由度が高いようです。

データベース

データを管理するためにデータベースが必要です。これも様々なものがあり、用途に応じて使い分けられます。

  • MySQL
    • 一番定番なシステム
  • SQLite
    • 動作が軽量

趣味等の場合で公開せず、自分のパソコンだけでアプリを作る場合は上記の要素でも足りそうですが、ネット上に公開する際はもっと必要なものがあります。

サーバー

ネット上に公開するにはサーバーにアプリをアップロードする必要があります。物理サーバーを使うほか、GCPAWSなどのクラウドサーバーを使う方法もあります。AWSだと無料で使える機能があるので、小規模なアプリならそれで充分かもしれません。

バージョン管理

チームで制作を行う場合はgitなどでバージョン管理を行う必要があります。以前あまり分からないまま使っていたことがあったので、ここはちゃんと勉強したい内容です。

最後に

まずは作ろうとしている物から、使う言語などを決定していくことから始めようと思います。他にも必要な知識はあるでしょうが、勉強していくうちに見つかると思っています。

また、ウェブシステムデザインプログラムでは、こういったWebシステムの設計についても学ぶことができるので、興味がある方はぜひご注目ください。

最後まで読んでいただきありがとうございました。

「競技」プログラミングという存在

はじめに

はじめまして、Websysスタッフの後藤です。

今回は私が5年以上続けている競技プログラミングについてご紹介したいと思います。

アプリケーションやWebサイトを作る以外のプログラミングの世界も知っていただければと思います。よろしくお願いします。

最近の話

ところで、4/22(土)の23時ごろ、日本のTwitterトレンド20位に「unrated」という文字列がランクインしました。

これはその日に行われた競技プログラミングのコンテストが無効試合となるアクシデントが起こったことから来ていると思います。
原因はDDoS攻撃という攻撃でジャッジサーバーが機能しなくなり、コンテストを続行することができなくなったからということでした。

1つの競技プログラミングのコンテストがTwitterトレンドに上がるほどの話題になっています。最近少し人気が出ているので、その世界を覗いてみましょう。

競技プログラミングとは?

まず、競技プログラミングというのがどういったものなのかをご紹介したいと思います。

競技プログラミングというとアルゴリズム系を指すことが多いです。これは、ある問題が出され、その問題の要求を満たすようなプログラムを正確に記述する速さを競うというものです。

コンテストの紹介

  • AtCoder
    • 日本最大の競技プログラミングサイトと言っても過言ではないと思います。
    • 冒頭のunratedの話はこのサイト
    • コンテストに参加するとレートが付与される。
    • レート帯ごとに色が振られており、上を目指すモチベーションにしている
    • AtCoder Beginners Contest(ABC)をはじめとし、様々な層向けのコンテストがほぼ毎週開催されている
  • Codeforces
    • 海外版AtCoderのようなサイト。コンテスト頻度が高めですが、時間帯が日本の生活と合わないこともしばしば。
  • ICPC
    • 大学間対抗コンテストです。1年1回国内予選、アジア地区予選、世界大会と段階を踏んで進んでいく大会です。
  • 情報オリンピック(JOI)
    • 高校生以下向けコンテストです。過去問はAtCoderでとけます

AtCoder電通大

所属欄に電通大を書いているアクティブユーザーが4/24現在104人います。

結構多いほうなのではないかな?と思っています。

atcoder.jp

最近はただのオンラインゲームから、就活に役立つようにもなりました。レートに応じてインターンのスカウトが来たりするようになるAtCoderJobsなるサービスがあったり、企業スポンサーのコンテストで希望を出すと説明を受けられたりしますね。

レートの分布はこんな感じです。

所属電通大の人のうち、一番レートが高い人の画像をお借りました。自分は緑と水色の境目くらいにいます。まずは灰色を抜け出して色を付けるところからという感じですかね。

例題

情報オリンピックのサイトの中(こちら)にある例題を眺めて、競技プログラミングの世界を覗きます。

JOI2014改題

基本料金があり、ある程度使うと使った分に比例してお金がかかるプランと、使った分に応じた金額だけかかるプランの比較問題ですね。

どちらが安いのか、現実で考えることもあると思います。これをプログラムで自動化しようという問題になります。とけそうでしょうか?

その他のコンテスト

プログラミングをして競うという意味ではアルゴリズム系以外のコンテストもあります。例えば

  • CTF系
    • セキュリティに関する問題が出され、埋め込まれた旗を探したりするものが多いです
    • SECCONとかが有名ですね
  • Kaggle
  • ゲームAI系
    • 最近は少なくなってきて、codingame くらいしか知らないです...
    • オセロのAIなど、あるルールのもとで強いAIを作り、AI同士の対戦で1位を目指します
  • ヒューリスティック
    • ラソンと呼ばれているやつですね。(TopCoder Marathon Matchから?)
    • 厳密解を求めるのが困難な問題に対し、いかに精度良い近似解を作れるかという趣旨のコンテストです
    • AtCoder Heuristic Contestが最近はメインだと思います。

という感じです。

おわりに

なにかモノを作るためのプログラミング、サーバをメンテナンスするためのプログラミングなどなど色々あると思います。

何もやりたいことが思いつかない場合はこういう道もあるのだと知っていただけるといいのかもしれません。

この記事がなにかの発見になったなら嬉しいです。ありがとうございました。