この記事はNuco Advent Calendar 2022の10日目の記事です。
自己紹介
現在、某国立大学の情報科学類に通っている大学4年生です。
今年の夏ごろから初めてのベンチャー企業の長期インターンに行き始めました。
そこで今回は大学4年間でいろいろなITに関する勉強をした中で、これは実務に入るまでにやっておいてよかったと実際に思ったものを6つピックアップして紹介したいと思います。
【1】Linuxコマンド
Linuxコマンドとは
実務では自分のパソコンではなく、「サーバー」と呼ばれるコンピュータを操作する時があります。
アプリケーションの情報を保存するDBサーバーであったり、ブラウザからのリクエストに応じてブラウザに表示する内容を返却するWebサーバーなどがサーバーの実例として挙げられます。
サーバーは基本的に画面上でマウスを使って操作する「GUI方式」ではなく、下図のような画面でコマンドと呼ばれる文字列を打って操作する「CUI方式」を採用しています。
サーバーの殆どはWindowsやmacOSではなく、Linuxという名前のOSで動いています。
OSとはコンピュータを操作するための土台となるソフトウェアのことです。
この「CUI方式」を採用しているLinuxを操作するにはLinuxコマンドを使います。
そのため、サーバーを使用するためにはLinuxコマンドを勉強する必要があるのです。
重要コマンド
目標は「GUI方式」で使う操作が「CUI方式」でもできるようになることです。
ただ方式が変わるだけなので、「GUI方式」でよく使う操作は「CUI方式」でもよく使います。
だから今回は頻度の高いコマンドを二つの項目に分けて紹介していきます。
以降で実際にコンピュータを動かして説明しますが、人によっては異なる挙動をするときがあります。
(1) ディレクトリの操作
ディレクトリとはフォルダと同義の言葉です。
WindowsとmacOSはフォルダと呼び、Linuxではディレクトリと呼びます。
WindowsとmacOSでも「CUI方式」で操作する場合はディレクトリと呼ぶことも多いです。
今回はこの通りに分けて呼ぶことにします。
パソコンでよく、フォルダを作ったり、フォルダにカーソルを合わせてクリックし、フォルダを開いて中身を見たりすると思います。
このよくやる操作を「CUI方式」でもできるようになりましょう!
まず、Windowsの人はPowerShell, macOSの人はターミナルというコマンドラインと呼ばれるアプリを開いてみてください。
そしたら下図のような画面が出てくると思います。
ここにLinuxコマンドを入力することで「CUI方式」自分のコンピュータを操作できます。
1つ目に紹介するコマンドは「cd」です。
% cd ディレクトリ名
上記のように使います。
これはディレクトリを移動するためのコマンドで、フォルダを開く操作になります。ただ、「GUI方式」と違って開くと同時に中身が表示されるわけではないので注意です。
2つ目に紹介するコマンドは「mkdir」です。
% mkdir ディレクトリ名
上記のように使います。
これは新しいディレクトリを作るためのコマンドで、フォルダを作る操作になります。
3つ目に紹介するコマンドは「ls」です。
% ls
上記のように使います。
これはディレクトリの中身を表示するコマンドで、フォルダの中身を見る操作になります。
ではこれを実際に使ってみましょう!
コマンドラインを開いて何もしていない状態から始めます。
まずdesktopディレクトリに移動します。
% cd desktop
次にworkという名前のディレクトリを作ります。
% mkdir work
そしたらデスクトップ画面にworkというフォルダが追加されていると思うので確認しみてください!
最後にworkディレクトリに移動して、中身を確認しましょう。
% cd work
% ls
まだworkフォルダは空なので、何も出力されないと思います。
試しにworkディレクトリに他のディレクトリを作ってから中身を見てみましょう。
% mkdir next_work
% ls
next_work
そしたら、next_workと出力されると思います。
(2) ファイルの操作
普段パソコンでファイルを新しく作ったり、ファイルを違うフォルダに移動させたり、ファイルを削除したりすると思います。
次はこれらの操作を「CUI方式」を使ってできるようにしましょう!
1つ目に紹介するコマンドは「touch」です。
ここだけ、OSによって異なるのでご注意ください。
macOSの人
% touch ファイル名
Windowsの人
% New-item ファイル名
上記のように使います。
これは新しいファイルを作るコマンドです。
2つ目に紹介するコマンドは「mv」です。
これには二つの使い方があります。
% mv ファイル名 移動する場所
% mv ファイル名 新しいファイル名
上記のように使います。
一つ目はファイルを違うディレクトリに移動させるコマンドです。
二つ目はファイルを新しいファイル名に変えるコマンドです。
今回はよく使う移動させるコマンドの方を扱います。
3つ目に紹介するコマンドは「rm」です。
% rm ファイル名
上記のように使います。
これはファイルを削除するコマンドです。これで削除したものはゴミ箱に行かないので気をつけてください。
ではこれらを実際に使ってみましょう!
ディレクトリの操作の続きから始めます。
現在はworkディレクトリにいます。
まず、text.txtという名前のファイルを作ります。
ここもOSによって異なるのでご注意ください.
macOSの人
% touch text.txt
% ls #中身の確認
next_work text.txt
Windowsの人
% New-item text.txt
% ls #中身の確認
next_work text.txt
次にtext.txtファイルをdesktopディレクトリに移動させます。
% mv text.txt ../
そしたらdesktop画面にtext.txtが追加されていると思うので確認してみてください!
ここで使った「../」はよく使うので紹介します。
今のディレクトリの構造は以下の図のように、desktopディレクトリの中にworkディレクトリがあり、その中にnext_workディレクトリとtext.txtファイルがあります。
「../」というのはひとつ上の階層のディレクトリを意味します。
今回mvコマンドを実行したときは、この図のworkディレクトリにいたので、「../」はそのひとつ上の階層であるdesktopディレクトリを意味します。
ぜひ覚えておきましょう!
最後に作ったファイルを削除します。
% cd ../ #ファイルの移動先であるひとつ前の階層に移動
% rm text.txt
これでdesktop画面からファイルが消えたと思います。
以上が重要コマンドになります。
実際に手を動かしながら慣れていきましょう!
勉強法
Linuxコマンドは非常にたくさんあるため、全てを覚えようとするのはとても大変です。
だから、基本的にはできること(ファイルの削除やディレクトリの移動など)を覚えて細かい使い方はそこまで覚えないのがベストです。
ただ先に紹介したとてもよく使うコマンドなどは覚えた方がいいです。
ここでもう一度まとめておきます。
cd : フォルダを移動するコマンド
mkdir : ディレクトリを作るコマンド
ls : ファイルを表示するコマンド
touch : ファイルを作るコマンド
mv : ファイルを違うディレクトリに移動させるコマンド
rm : ファイルを削除するコマンド
この6つ以外にもたくさんのコマンドがあります。
Linuxコマンドはいろいろなサイトでまとめられて、今回紹介していない優先度の高いコマンドを紹介しているサイトなどもあるのでそういったサイトを参考にしながら勉強するのがいいと思います。
下記のサイトは重要なコマンドのみをまとめているのでおすすめです!
https://blackbird-blog.com/linux-cmd-basic1
【2】ssh接続
ssh接続とは
ssh接続は自分のパソコンからサーバーや他のパソコンなどに接続することを指します。
機械学習で大量の学習を行うときなどの処理時間が多くかかるプログラムを実行する時に自分のパソコンよりも高性能な計算資源を持つサーバーにssh接続をすることで処理時間を短くし、効率的にプログラムを実行するときに使います。
私は大学の研究でスーパーコンピュータを扱うのですが、なんとスーパーコンピュータを扱う際も研究室のパソコンからスーパーコンピュータにssh接続して操作します。
他にもファイルやフォルダを他のパソコンに送るときに普段はLineやSlackといったアプリケーションを介して送ったりするとアプリケーション上に履歴が残ってしまったり、ファイルの容量の大きさに上限があったりしますが、ssh接続を使って暗号として他のパソコンに送ることで秘匿性を高く持ちながら容量の大きなファイルも送ることができるといったメリットもあります。
実際の使いかた
ssh接続はコマンドラインを使って行います。
コマンドの最も基本的な形式は以下になります。
%ssh リモートホスト名
この例のリモートホスト名に接続先のIPアドレスやドメイン名を入れることで、ssh接続をすることができます。
大学のスーパーコンピュータに接続するときなどは以下のようになります。
%ssh cygnus.ccs.tsukuba.ac.jp #ログイン認証が必要なため、このまま入力しても接続できません
ssh接続した後はリモートホストを「CUI方式」で操作するため、先ほど紹介したLinuxコマンドを使います。
「mkdir」でディレクトリを作ったり、「vi」コマンドでファイルを編集してプログラムを実行したりします。
ただ、ssh接続にはログイン認証情報が必要になります。
このログイン認証によく使われるのが、秘密鍵と公開鍵です。
ログイン認証までの流れ
まず、自分のパソコンで対となる秘密鍵と公開鍵を作成します。
公開鍵はssh接続先に置き、秘密鍵は自分で保持しておきます。
こうすることで、ログインするときに秘密鍵で生成した電子署名をssh接続先に送ります。
そして、接続先が公開鍵を使って署名が正しいか検証することで安全にログインすることができます。
また「scp」というコマンドもssh接続と共によく使うコマンドです。
コマンドの基本的な使い方は以下になります。
%scp text2.txt リモートホスト名
この例のリモートホスト名に接続先のIPアドレスやドメイン名を入れます。
text2.txtのあるディレクトリで、実行するとremote_hostにファイルをコピーしてくれます。
この時の通信にはssh接続を使用して暗号化してくれるため安全です。
自分のパソコンで書いたコードをssh接続先で実行したいときにscpを使ってファイルを送り、プログラムを実行します。
以上のように他のパソコンでプログラムを実行するときは主にこの二つのコマンドを使って行います。
勉強法
ssh接続は実際にやってみないことには理解が進まないと思います。
だからサイトなどを参考にして一回やってみるのが早いです。
パソコンは1台あれば大抵の学んだことは実行できるのがいいところなのでとにかく手を動かしてみましょう。
ssh接続の勉強をするのに良いサイトを下記に記載したのでぜひ参考にしてみてください!
https://zenn.dev/thao_0108/articles/938270a57abbd8
【3】vimコマンド
vimコマンドとは
vimコマンドはコマンドライン内でファイルを編集するためのLinuxコマンドになります。
これはssh接続したときにファイルを編集したいときなどに使用します。
抑えるべきポイント
このvimコマンドの抑える点はモードの操作です。
% vim ファイル名
上記のようにコマンドラインで打つとファイルを編集する画面に切り替えることができます。
ここで難しいのがモードの切り替わりがあるところです。
vimでは主に下図の3つのモードを切り替えて操作します。
(1) ノーマルモード
このモードを起点に各モードに遷移することができます。
各モードからは「Esc」を入力するとノーマルモードに遷移します。
(2) 入力モード
ファイルを編集するときなど、文字を入力するときに使います。
ノーマルモードからは「i」などを入力すると遷移できます。
(3) コマンドモード
ファイルの保存やvimを終了するときに使います。
ノーマルモードからは「:」を入力すると遷移できます。
Linuxコマンドのところで作ったtext.txtで試してみましょう。
% vim text.txt
上記のように実行すると以下のような画面になると思います。
ここで、「t」や「r」などを打っても入力されません。
そこで、「i」を入力してみると下にinsertと出て,「t」や「r」などを入力できるようになります。
次に「esc」を入力してから、「:wq」と入力してみましょう。
そしたら元のコマンドラインに変わると思います。
「:wq」はファイルの変更を保存して終了するコマンドです。
ここでもう一度ファイルをvimコマンドで開いてみると、先ほどの内容が保存されていることが確認できます。
vimでは用途の違うモードを使いこなすことが大事です。
今回紹介したコマンドはほんの一部で、vimにはそれぞれのモードに色々なコマンドがあるので、もっと詳しく知りたいという方は以下のサイトを参考にしてみてください!
https://qiita.com/gorilla0513/items/e8ccb15bfc87e7ed8d5b#%E3%83%93%E3%82%B8%E3%83%A5%E3%82%A2%E3%83%AB%E3%83%A2%E3%83%BC%E3%83%89
勉強法
vimの勉強にはvimtutorがおすすめです。
これはvimというコマンドを使いこなすための勉強用のコマンドです。
これを一通り勉強することでvimを簡単に使いこなすことができるようになります。
時間も20~30分で済むので忙しい人でも苦にならずにできると思います。
vimtutorはコマンドラインで「vimtutor ja」と打ち込むと日本語のチュートリアル画面が出るのでぜひ参考にしてみてください!
サンプルコード
%vimtutor ja
【4】GitHub
GitHubとは
GitHubは、世界中の人がプログラムコードやデザインデータを保存・公開できるソースコード管理サービスの
ことです。
企業などが複数人でアプリ開発を行うときは、同じファイルに対して同時に作業をする場合があり、どれが正しい修正か分かりづらくなります。
この問題はGitHubを使うことで解決できるため、多くの企業がコードの管理に使って
います。
だから実務に入ってからはGitHubが使える必要があります。
他にも自分で書いたコードをGitHubに保存することで、就活のときにGitHubの自分のページのurlを貼るだけで過去の実績を見せることができるので便利です。
ここで、GitHubとGitの二つがあるのでその違いに触れておきます。
GitはLinuxコマンドの一つで、バージョン管理ツールのことです。
これを使うことで、ファイルのさまざまな段階での履歴を自分のパソコンに保存することができます。
また、その変更を他のコンピュータに共有したり、他のコンピュータから変更を受け取ることができます。
例えば、今日ファイルを変更したが、それが不要になり、昨日までの状態のファイルが欲しくなったとき、昨日までの履歴をGitに保存しておけば、容易に戻すことができます。
GitHubは、Gitを使った共同開発向けのソースコード管理サービスのことです。
コードの管理を自分たちのパソコンだけでするのではなく、GitHubのクラウド上にもコードを保存し、コードの変更点の可視化や「Pull Request」といった他のユーザーとのコラボレーション機能を持つことで、複数人で開発しているときにお互いの編集が確認でき、コードの管理がしやすくなります。
こういったコード管理サービスは他にもあるのですが、世界中で使われているGitHubを使えるようになっておけば問題ないと思います。
到達目標
Gitにはいろいろなコマンドがあります。サイトから他人が作ったフォルダをコピーするコマンドや自分で作ったファイルをクラウドに保存するコマンドなどがあります。
個人的にGitHubの難しいところはコードを保存する場所が複数あるところだと思います。
GitHubは下図のようにリモート(クラウド)とローカル(パソコンのストレージ)にそれぞれリポジトリ(保存場所)を持ちます。
画像出典:【超入門】初心者のためのGitとGitHubの使い方 引用先url
さらブランチと呼ばれるものを使って、履歴を分けて保存することができます。
この3つを理解するのが重要になっていきます。
(1) リモートリポジトリ
リモートリポジトリは複数人で共有するリポジトリです。
変更したファイルをここに保存することで、他の人が内容を確認することができます。
(2) ローカルリポジトリ
ローカルリポジトリは、個人がローカルマシン上で作業するために利用するリポジトリです。
基本的に個人で作業している時の変更履歴はここに保存されています。
ローカルリポジトリの変更をリモートリポジトリに反映することで、他の人に共有できます。
(3) ブランチ
同じプロジェクトで新しい機能を追加する履歴とリリース版の履歴の二つに分けたい時があります。
これはブランチを分けることで二つの履歴を保持して開発を同時に進めることができます。
履歴を枝分かれさせることに由来して、ブランチと呼ばれています。
以下のようなイメージで、ブランチを分けることで履歴を二つにして開発を進めていくことができます。
この3つを状況に応じて使いこなすことができるようになりましょう!
おすすめの勉強法
GitHubでは、リモートリポジトリとローカルリポジトリとブランチの理解が重要です。
それが理解できれば、あとは保存したい場所に対応するコマンドを調べながらで大丈夫です。
この勉強にはYouTubeが一番良いと思います。理由としてはなによりも図での解説が必要だからです。
現実でも地図を見て場所を理解するように、GitHubでもイメージ図をみながら解説された方が頭に入ってきやすいです。YouTubeで「GitHub 入門」と検索すれば様々なコンテンツが見つかるのでぜひ試してみてください!
【5】数学の集合
集合の必要性
高校生の数学の時に扱った集合ですが、これを苦手としていた人も多いのではないでしょうか。ただ、エンジニアになると集合の考えをわかっておくことが大きな手助けとなります。
実務に入ってデータ分析の業務に携わるときに必ずといっていいほど、SQLと呼ばれるプログラミング言語を扱います。
SQLは表形式になっているデータベースからほしい情報を取り出すときに使う言語です。
このSQLを使うときに集合の知識が必要になってきます。
集合を使った例
データベースからほしい情報が直接取り出せない時が多々あります。
そんな時に補集合やド・モルガンの定理といった考え方を使うことで、限られたデータの中からほしい情報を取り出すことができます。
補集合
ある会社でどのユーザーが何の商品を買ったかを日付をつけて記録したデータベースがあります。
下図のようなデータがたくさん続いているイメージです。
ここから、24日に何も買っていないユーザーを調べたいとします。
しかし、データベースの中には購入の記録しかないため、直接買っていないユーザーを取り出すことはできません。
そこで補集合という考えを使うと、データベースの中にある全ユーザーの集合から24日に購入したユーザーの集合を引くことで、24日に購入していないユーザーの集合を求めることができます。
このように補集合を使うと、購入した記録のデータベースから欲しい情報を取り出すことができます。
ド・モルガンの定理
先ほどと同じデータベースから25日と26日のどちらも買っていないユーザーを知りたいとします。
ただ、26日の購入の記録も25日となって記録されているバグが発生しています。
本来は25日に購入したユーザーの集合Aの補集合と26日に購入したユーザーの集合Bの補集合の積集合で、両日で購入していないユーザーを求めることできます。
でも今回はバグによって、25日に購入したユーザーの集合Aと26日に購入したユーザーの集合Bがわかりません。
その代わり下の図のような25日か26日に購入したユーザーの集合つまり、集合Aと集合Bの和集合はわかっています。
図で比べるとわかりやすいのですが、これは先ほど求めたものとちょうど逆の集合になっています。
これより、集合Aと集合Bの和集合の補集合で求めることができることがわかります。
このようにド・モルガンの定理は使うことができます。
下図は公式とその図です。
このように補集合やド・モルガンの定理といった考え方を使うことで、限られたデータの中からほしい情報を取り出すことができます。
だから集合の知識はデータベースを扱うときに非常に役立ちます!
おすすめの勉強方法
大学受験で数学を勉強した人はわかると思いますが、数学ができるようになるにはとにかくたくさん問題を解くしかありません。
公式を頑張って覚えたところでいつそれが使えるのかがわからなければ何の意味もありません。
いろいろな種類の問題を解くことによって、実際のSQLを書くときも見覚えのあるパターンとして捉えることができ、素早くコードを書くことができると思います。
また、集合の問題を解くときはペン図をちゃんと書きながら解くことによって理解度が増すと思うのでぜひ試してみてください。
【6】英語
英語の必要性
色々なところで英語は大切と言われていても、DeepLやGoogle翻訳といった便利な機能に甘えて、勉強しないでいる人も多いのではないでしょうか。
確かに読むという行為で英語力というのはそれほど必要ではないかもしれません。しかし聞くときや調べる行為は英語力がないとできません。
プログラムを書いているときに「これってどうやるんだろ?」と思ったときに日本語で調べても求めている情報が出てこない時が多々あります。
しかし英語の情報量は日本語の1000倍と言われています。
だから日本語でほしい情報がなかったとしても、英語を使って調べることができれば見つかる可能性が非常に高まります。
英語ができれば10分で解決できたことも、日本語でしか検索できないとサイトが見つからずに1時間以上時間を無駄にするといったこともあります。
また、YouTubeの動画も英語のものを見ることができれば選択肢が格段に増えます。
だから、エンジニアとしての高みを目指すなら英語は必須だとおもいます。
今回は英語での検索について詳しく書いていきます。
英語での検索のコツ
先ほども書いたように英語の情報量は日本語と比べて非常に多いです。
英語での検索力をつけるだけで、問題の解決能力が格段に上がります。
そして、英語の検索力というのはListening力を身につけるのと比べて、非常にコスパがいいです。
英語の検索において大切なのが文章にするということです。
例えば、javaというプログラミング言語で配列の作り方を調べたいとします。
この時、日本語で調べるとしたら「java 配列」と単語で調べると思います。
これを英語で検索してみましょう。
まず、検索文を英語にします。
配列はarrayなので、「java array」となります。
しかし、これで調べたとしても検索結果はほとんど日本語のままです。
そこで、英語のフレーズを追加しましょう。
ここでは、配列の使い方を調べたいので「how to use array java」と検索してみます。
そしたら、英語のサイトが検索結果に出てくるようになります。
このように英語で検索したいときは、調べたいものの単語だけでなく、英語のフレーズを入れて検索することで、英語圏の検索結果がたくさん出てくるようになります。
おすすめの勉強法
英語の勉強でも積極的に実践していくことが重要です。
英文を読めるようになりたいのならたくさん英文を読むしかないし、聞けるようになりたいならたくさん英語を聞くしかないし、話せるようになるなら英語で話すしかないです。
だから、検索力をつけるのもたくさん検索してみるしかないです。
練習として、普段疑問に思ったことを英語でも検索してみましょう。
先ほど書いたように、英語の検索はフレーズを入れることが大切です。
Qiitaなどで、よく検索に使われるフレーズをまとめている記事があるので、それを参考にしながら英語の検索に慣れていきましょう!
僕が参考にしたQiitaの記事は以下になります。
https://qiita.com/Ekodhikodhi/items/71df79b5d12470395239
https://qiita.com/hrsma2i/items/dd2efcbaadf5db8b8177
英語をできるようにして、効率を上げていきましょう!
まとめ
今回は、インターンに行って必要だと思ったことを6つ紹介しました。もちろんこれだけをやれば一人前のエンジニアに馴れるわけではありません。もっといろいろな勉強が必要になってきます。
この必要な勉強が何かを知るには実務をやることが一番の方法だと断言できます。実際に仕事をしてみることで自分では使わないような課金性のシステムを経験することもできるし、複数人での仕事の進め方など独学では勉強できないことがたくさんあります。
百聞は一見に如かず!ぜひ早い段階からインターンなどに挑戦して一人前のエンジニアを一緒に目指していきましょう!
最後に
弊社では、経験の有無と問わず、社員やインターン生の採用を行っています。
興味のある方はこちらをご覧ください。