Author: 190ikp

おいしいカレーのつくりかた

*これはKCS AdventCalender2019 15日目の記事です*

こんにちは.アドベントカレンダー遅延常習犯,いくぴー(Twitter: @190ikp)です.
前回に引き続き書く羽目になりました.修行だと思って書いていきます.

はじめに

「おいしいカレーのつくりかた」とは何か?
曰く,「これを制するものはレポートを制す」
曰く,「これを制するものは就活を制す」
曰く,「これを制するものは設計を制す」

というわけで今日は「おいしいカレーのつくりかた」を書いていこうと思います.

必要なもの

  • 材料
  • 調理器具
  • やる気
  • 要件定義

…要件定義?

そう,私たちははじめに,「カレーとは何か?」を今一度考え,その上で今回作るカレーの要件定義をしなくてはなりません.
これがない限り,必要な材料も調理器具も,工程数によるやる気の必要量もわかりませんので,非常に重要です.

それではさっそく,グーグル先生に聞いてみましょう.
なお,我が家代々の家訓に「Googleの検索エンジンを使うべからず」とあるので,検索はDuckDuckGoで行うものとします.

curry

ちなみに「カレーとは?」は国ごとに異なるようで,グローバルな定義らしきものも「多種の香辛料を併用して食材を味付けしたもの」という,なんともふわっとした感じでした.
今回作りたいのは(日本人的に)おいしいカレーなのですが,まだ「どの国のカレー」を作るかを決めていませんでしたね.
各個人の好みによって洋食のカレー,インドカレー(これにもさらに様々な種類がある),欧風カレー等々,意見が分かれそうです.
これは先の長い戦いになりそうだぜ…

…やる気が消失したので今回はここまでとします.

 

〜(完)〜

 

 


ここから本編


 

 

というわけで

今回は,開発の下準備である,要件定義・設計の大切さについてポエムっていきたいと思います.
(本当は関数のカリー化について書いてみたかったけど各方面から飛んでくるであろうマサカリが怖い)

要件定義とは

何かしらのシステムの開発・構築を始めるとき,そこには必ず目的があると思います(こういうものが欲しい,顧客からこういう依頼をされた,etc…).
要件定義とは,この目的をはっきりさせることです.
頭でっかちなふんわりとした目的をより具体的に絞り込み,最終的にそのシステムにどういった機能をもたせるかを決めます.
この作業を怠ると,顧客も含めて開発に携わるすべての人が不幸になります.ゴールが見えないからです.

人生にゴールは定めなくてもいいと思いますが,せめて開発にはゴールを定めましょう.

設計とは

要件定義をしたら,次は設計に移ります.

設計とは,要件定義に従って具体的なシステムの構成を検討・決定することです.
この「要件定義に従って」という部分はとても重要です.
ゴールを無視して暴走し始めると歯止めが効かなくなります.こわいこわい.
もしも要件定義に無かったことが設計段階で出てきたら,もう一度要件定義に立ち返って本当に必要なのか確認してみましょう.必要であれば追加しましょう.
ただし,ひとつのシステムにあれこれ盛りすぎると無駄に精神と体力がすり減ります.
あまりにも機能マシマシになってしまう場合には,複数のシステムに分割できるかを検討しましょう.

このプロセスは,次の段階である開発に移っても同じです.
もし実際に開発してみて「これもあったほうがいいかもしれない」と思ったら,何も考えず突っ走る前に一段階前のプロセス,つまり設計に戻ってよく考えましょう.
その機能を追加したことで設計に不整合が出てしまうと,メンバー全員が毎夜シュンケルする羽目になってしまいます.

必要だと感じたら,何度でも前のプロセスに立ち返りましょう.そのほうが結果的に開発効率は上がります.

おわりに

今回の記事では,複数人のチームでの開発を前提とした感じで,要件定義・設計がとても大事であると書いてきました.
これは,実際に何かしら作ったことがある方だと身に沁みて感じたことがあると思います.
ただ,この話は別にチームでの作業に限った話ではなく,個人で何かしら作るときにも生きてくることだと思います.
個人だと飛ばしがちですが,要件定義と設計のプロセスをきちんと踏むことでより効率的に開発ができるようになるでしょう.
作り始めたはいいものの中々終わらんぞ…ということが多々ある方はぜひ参考にしてみてください.

以上,要件定義が難しい「おいしいカレー」の開発は困難を極める,という話でした.

 

←14日目 | 16日目→

なぁ・・・ネットワークしようや・・・

*これはKCS AdventCalender2019 14日目の記事です*

はじめに

はじめまして. KCSの時空の歪み担当,来年もJ科B2のいくぴーです.
AI・高度プログラミングコンソーシアム(AIC) というところで計算サーバの面倒をみています.

最近,ネットワークを真面目に構築するか〜という空気ができつつあるので,KCS内でネットワークのお勉強会でもやってみようかな,と考えています.
具体的な活動は年明けから行う予定なので,ここでは「何を使って勉強すればよいか」ということを書いていきます.
参考にしてみてください(参考になるとは言ってない)

書籍ですが,まずは『マスタリングTCP/IP 入門編』を読みましょう.めちゃくちゃわかりやすいです.
これを読んで大まかに基礎を学んだらCCNA(Ciscoのネットワーク技術者資格)の本を読んでもいいのですが,ほとんどの方は演習用の実機を用意するのはハードルが高いと思います.
そこで,後述するGNS3を使うことになると思うのですが,これの使い方については正直ググったほうがより新しい情報が手に入れられます.
ただ,2019年現在だと今年出版された『GNS3によるネットワーク演習ガイド』が,そこそこわかりやすく導入が書かれており良さげです.

ツール

GNS3

仮想マシンを使って仮想的なネットワーク構築ができるソフトウェアです.無料で使えます.
使い方はここに割とまとまっています(ありがたい…).
ただ,使用するにはネットワーク機器のOSが別途必要です.

Cisco IOS

Cisco製のネットワーク機器に載っているOSです.
他ベンダーのコマンドもこれに近いので,ネットワークの勉強をする人はこれを使うことが多いです.
ただ,個人が入手するにはルータ等を購入してIOSを吸い出す必要があり(ヤフオクで買え).,少々ハードルが高いです.
そこで,次に挙げるVyOSを使うといいと思います.

VyOS

オープンソースのネットワーク機器向けOSで,Linuxディストリビューションのうちの1つです.
コマンドはIOSと少々異なりますが,学習用としては十分だと思います.
ネット上に情報も充実していますし,日本語のコミュニティもあるので良いのではないでしょうか.

Linuxベースだと他にCumulus Linuxもあります.
僕としてはこちらを推したい気持ちがあります.というのも実際に一部のベンダーはCumulus Linuxが載ったネットワーク機器をリリースしているからです.
GNS3等で仮想ネットワークの構築に使いたい場合はCumulus VXを無料で使うことができます.

さいごに

今まで自分の知らなかった分野を学習する際,ハードルとなるのが

  • 何から勉強すればよいか
  • 何を使って勉強すればよいか

だと思います.用語も何も知らなくてはググることもできませんからね…
今回の記事が,ネットワーク構築の学習をする上で後者の悩みを解決する一助となれば幸いです.

あ,あとKCSでネットワークに興味ある方は,よければjournal-networkチャンネルに参加してください.よろしくお願いします.

 

←13日目 | 15日目→

鯖缶 #とは

*これはKCS AdventCalender2018 13日目の記事です*

はじめに

はいどうもこんにちは.
やり手の名ばかりサーバ管理担当(鯖缶),いくぴーです.
最近サーバー構築やってるんですけど,ありえんハマっているのでネタにします.
文章力皆無なのはゆるしてヒヤシンス…

やっていること

サーバをたくさんおっ立てなくてはならないのですが

  • 個別で立てるのがダルい
  • 個別で管理するのがダルい
  • 開発環境と本番環境が違うとダルい

と3つのダルみが揃った結果,「docker compose使えばええやん」という安易な発想に至りました.
そういうことである.

今回はローカルでの開発用仮想サーバを立てることをメインにして書いていきますね.

実際にどうやってる?

必要なもの

サーバーに必要なのはDockerとDocker Composeだけです.
ローカルで本番と同じ構成のサーバを立てる際に必要なのは

  • VirtualBox
  • Vagrant
  • Docker (Docker Compose)

こんなとこですね.
VirtualBoxとVagrantはローカルに仮想環境を簡単に立てるために使います.
Windows10からDockerを使えるようになったのですが,Home版では使えないので…
ホストOSの違いを気にしなくていいようにした結果こうなりました.やはりWindowsはクソ.

やりかた

1. VirtualBoxとVagrantをインストール

ここでは本筋ではないので省略します.ネット上に記事はたくさん転がってるので参考にしてください.
Vagrantの使い方もとっっっても簡単なのでググってみましょう.

  • vagrant up (起動)
  • vagrant ssh (Vagrantで立ち上げたゲスト環境にSSHログイン)
  • vagrant halt (停止)
  • vagrant reload --provision (再起動する際にprovisionを実行)
  • vagrant destory (仮想環境を破棄)

とりあえずこれだけ知っていればどうにかなります.

2. Vagrantfileを編集

適当な作業ディレクトリをターミナル/コマンドプロンプトで開き,vagrant init "{BOX_NAME}"します.
BOX_NAMEはここから引っ張ってきます.今回は例としてubuntu/bionic64を使用しますね.
vagrant init "ubuntu/bionic64"を実行すると,Vagrantfileという以下のようなファイルができます.

ちなみに,このVagrantfileには設定上の様々なヒントがコメントとして記載されています.超親切ですね!
これをもとに,いい感じのオレオレVagrantfileを仕上げてみました.それとついでにdocker / docker-composeインストール用のシェルスクリプトも作りました.

ちなみに,Vagrantfile内のprovisionのところでshellの代わりにdockerを指定してconfig.vm.provision "docker", do |d|とすることで自動的にインストールすることも出来るのですが,本番サーバで実際に動かすDockerとバージョンを統一したいので,わざわざ手動でインストールしています.

3. docker-compose.ymlとnginx.confを編集

Vagrantfileと同じディレクトリにdocker-compose.ymlとnginx.confいう名前でファイルをふたつ作っておきます.
docker-compose.ymlの中はご自由に…という感じなのですが,今回はNginxでHelllo Worldを表示させることを目標にしましょう.
ちなみにNginxはApacheとならぶwebサーバソフトウェアのひとつです.
このNginxの設定ファイルnginx.confの設定例も一緒に貼っておきます.

またVagrantfileと同じディレクトリにwwwディレクトリを作り,その中にhello worldを表示させるindex.htmlを置いておきます.

4. 仮想サーバ起動

ここまでできたら,あとは仮想環境を立ち上げるだけです.Vagrantfileのあるディレクトリでvagrant upしてみましょう.
初回はOSのイメージを引っ張ってくるので少し時間がかかります.気長に待ちましょう.
しばらくするとCreating Web...と表示が出てくると思います(出てこないかもしれないですが).そうしたらブラウザでlocalhostを開いてみましょう.Hello Worldと表示されているはずです.

さいごに

今回,僕はさくらのVPSを借りているのですが,サーバーを本格的に運用するなら,これ以外にもやるべきことはたくさんあります.
最も面倒くさいのがセキュリティまわりの設定です.
ファイアウォールやSELinuxの設定も必要ですし,また多くのdockerコンテナは基本的にrootユーザーで実行されてしまうのでこれもまたセキュリティ上のリスクを抱えています.これを回避するための策も講じなければなりません.労力に見合わないんだよなぁ…
ただ,「今のローカルの環境を壊したくない,リモートデバッグ的に使いたい」というのであればちょうどいいかもですね!

というわけで,個人とか小規模なスタートアップ等でサービス開発するときはあらかじめ色々入ってくれてるやつ(Netlifyとか)を活用したほうがいいと思います.
つまりそういうことなんである.以上.