LoginSignup
1
0

More than 5 years have passed since last update.

[Dev101]#2 Hello World!

Last updated at Posted at 2019-02-06

AGENDA

  1. はじめに
  2. git clone
  3. いろいろな言語
  4. C
  5. C++
  6. Java
  7. Python
  8. おまけ

0. はじめに

本記事は「プログラム開発ってじぇんじぇんイメージ沸かないよぉ~」って方向けの第一歩ハンズオンです。
これやったからって開発出来るようにはなりませんが、プログラム言語とかプログラム開発ってものに親近感持てるようになると良いなーと思っています。

なお、今回使用するソースコードは以下にあります。
Githubとかgitの説明は今後ぼちぼちやって行きますので、今回は「便利なソースコード入手コマンド」って感じで操作してください:sweat:

Dev101-02-HelloWorld
001.PNG

1. git clone

(1)Play with Docker起動

まずは前回記事を参考にPlay with Docker環境を立ち上げましょう。
[Dev101]#1 Play with Docker

起動はこちらから

(2)git clone

以下のコマンドを入れて今回資料をgit cloneしてください

コマンド入力
git clone http://github.com/Nagahisa/Dev101-02-HelloWorld.git
cd Dev101-02-HelloWorld
tree .

002.PNG

ブラウザのGitHubサイトで見えているコンテンツをローカルにコピー(clone)出来ました。

2. いろいろな言語

そのうちコンパイル言語とか中間言語の説明を書く予定
時間がないので参考リンクでご勘弁を:sweat:

Wiki:コンパイラ
Wiki:バイトコード
Wiki:スクリプト言語

3. C

C言語はUNIXの歴史に深い関係がある言語です。
Wiki:C言語
003.PNG

ソースコードを見てみましょう。

コマンド入力
cat src/helloworld.c

004.PNG

もちろんブラウザでも見れます。
helloworld.c

このソースコードをコンパイルして実行ファイルを作成し実行してみましょう。

コマンド入力
ls -l
cc -o hello-c src/helloworld.c
ls -l
file hello-c
./hello-c

006.PNG

コンパイラ(cc)の-oオプションで作成するファイル名 hello-c を指定していますが、-oオプションを指定しないとa.outというファイルが出来ます(試してみて下さい)。

4. C++

C++言語はC言語をオブジェクト指向開発用に拡張した言語です。
Wiki:C++言語
007.PNG

C言語の上位互換なので先ほどのC言語プログラムもC++でコンパイルできます。
C++のソースコードを見てみましょう。

コマンド入力
cat src/helloworld.cpp

008.PNG

helloworld.cpp

このソースコードをコンパイルして実行ファイルを作成し実行してみましょう。

コマンド入力
ls -l
c++ -o hello-cpp src/helloworld.cpp
ls -l
./hello-cpp

009.PNG

5. Java

JavaはC/C++言語をベースにして、従来のソフトウェアが抱えていた移植性問題の解決をを目指して開発された言語です。
”write once, run anywhere”(一度書けばどこでも動く)というのがキャッチコピーでした。
Wiki:Java
010.PNG

"従来のソフトウェアが抱えていた移植性問題"ってのは、C/C++言語で書かれた実行モジュールは、特定のプラットフォームでしか動かないって問題です。
先ほどの "file hello-c"の表示を思い出してみましょう。
011.PNG

この実行モジュールは64ビットのx86環境でしか動きません(もっと他にも条件がありますが)。つまりこの実行モジュールをRaspberry PiのようなARM環境に持って行っても動かない訳です。
この問題を解決するためにJavaはJava仮想マシン(Java VM=JVN)というものを導入しました。

Javaプログラムは特殊なバイトコードにコンパイルされて、これがJava仮想マシンと呼ばれるソフトウェア上で実行される。各プラットフォームに対応したJava仮想マシンがハードウェア間の差異を吸収し、環境に依存しないプログラム動作を実現する仕組みとなっている。"

早速 Java VMなど見てみましょう・・・と言いたいところですが、実はPlay-with-Docker環境にはJavaが入っていません :frowning2:
Javaをインストールすることも出来ますが、せっかくのDocker環境なので、Javaコンテナを使ってみましょう。

DockerイメージをPULLして

コマンド入力
docker pull java

012.PNG

コンテナのbashを対話起動

コマンド入力
docker run -v /root:/root -it java bash
cd /root
cd Dev101-02-HelloWorld/src

013.PNG

ソースコードはこんな感じです。
014.PNG

HelloWorld.java

バイトコード(classファイル)にコンパイルしてみます。

コマンド入力
ls -l
javac HelloWorld.java
ls -l

015.PNG

HelloWorld.classというバイトコードが出来ていますので、これをJava VMで実行します。

コマンド入力
java HelloWorld

016.PNG

このバイトコード(HelloWorld.class)はMacやWindowsマシンでもJava VM上で動作します。

Java言語のために導入されたJVMですが、JVMで動作する別言語もたくさん出ています。
Ruby互換のJRubyやHadoop SPARKで使われるscalaなどが有名です。

6. Python

Pythonはスクリプト言語の一種で、言語仕様としてインデントを必須としているので、キレイなコードが書きやすいなどの特徴があります。Pythonにimport出来る科学計算系のモジュールが多数出ており、最近は機械学習用のグルー言語として人気があります。
Wiki:Python

018.PNG

Pythonには2系と3系があって互換性がないので注意が必要です。

こちらはgit上にはソースコードを載せていませんので、以下のような helloworld.pyファイルを作成してみましょう。

コマンド入力
cat << EOF > helloworld.py
test="Hello Python World!"
print(test)
EOF

019.PNG

このファイルをpythonコマンドの引き数に指定して実行します。
020.PNG

pythonコマンドにはREPL(対話型)機能があるので、そちらでも試せます。
021.PNG

7. おまけ

すこし新し目の言語も試してみましょう。個人的な趣味でGo言語を取り上げます。

Go言語はGoogleによって開発されたコンパイル言語です。
最近のマイクロサービス化の流れの中でAPIバックエンド開発などに使われ始めています(ex.マメルカリ)。
Wiki:Go(プログラミング言語)
017.PNG

コマンド入力
docker pull golang
docker run -v /root:/root -it golang bash
cd /root/Dev101-02-HelloWorld/src

022.PNG

helloworld.go

goコマンドには内部でコンパイルして実行してくれるrunと、実行モジュールを作成するbuildがあるので両方試してみます。
023.PNG

昔はCコンパイラ(GNU C)を導入するのに、ソースの展開・OS付属Cコンパイラでのビルド・ビルドで出来たGNU Cでの再ビルドなどで丸一日かかっていましたが、そのうちLinuxの yum/aptコマンドで簡単にバイナリ導入ができるようになりました。今ではDockerでサクッと各種言語が試せます。なんて素敵な時代なんだ!

色んな言葉で「こんにちは」を言うように、いろんな言語で「Hello World!」やってみるのも楽しいですよ。

Enjoy:bouquet:

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0