【gitをソフト開発で使いこなそう:第2回】gitを実際に使ってみよう!

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

実際にgitを使い始めるには具体的にどうすればいいのだろう?と思っている方に、gitの導入方法について解説します。
記事を読みながらコマンドを実際に実行してみると、より理解が深まります。

gitの導入

導入するもの

本連載では「git for Windows」を題材にGitを解説していきます。
そのためここで導入するものは「git for Windows」になります。

ダウンロード&インストール

「git for Windows」は、以下のリンク先の「Download」を押すとダウンロードすることが出来ます。
ダウンロードしたexeファイルを実行することで、git for Windowsインストーラーが起動しインストールが行われます。

gitforwindows.org

text

詳細な解説

インストールの際の詳細な設定について知りたい方は以下の記事の内容を参考にしてください。
qiita.com

ほかの環境で動かす

Linux,Mac等の環境でgitを動かす方法を知りたい方は以下の記事の内容を参考にしてください。
git-scm.com

GitBashを開く

Gitのインストールが完了したら、GitBashを開いてみましょう。
以降の連載ではこのGitBashを使ってGitを操作していきます。

Windows環境であれば、エクスプローラーで右クリックすると下のような画面が表示されます。この画面の「Git Bash Here」をクリックするとGitBashが開きます。

text

text

Gitが正常に動作するか確認する

GitBashが開いたら、以下のコマンドをGitBashに入力してGitが正しく動作することを確認しましょう。(versionの前についている―(ダッシュ)は二つ入力する必要があります。誤字ではありません。)

git --version

Gitが正しく導入されていれば、次のような文字が表示されます。(バージョンはあなたが導入したGitによって変わります。)

git version 2.17.0.windows.1

逆に以下のような文字列が表示された場合は導入が上手くいっていません。
私に質問を送るか、今まで行った手順を再確認してください。

bash: git: command not found

GitBashで日本語を表示できるようにする

このままの設定では、日本語が正常に表示されません。
そのため、以下のコマンドを実行して日本語が正常に表示されるようにします。

git config --global core.quotepath false

文字を見やすくする

GitBashでは、文字の大きさやフォントを設定することが出来ます。
GitBash左上のロゴをクリックし、表示されたメニューのOptionsをクリックします。
すると、下のような画面が表示されます。
text

(上のような画面が表示されない場合、画面左側のメニューから「Text」の所をクリックしてください。)

右のほうに表示されている「Select...」をクリックすると、フォントと文字の大きさ等を設定することが出来ます。
ここではフォントの種類をMSゴジック、フォントの大きさを12ptと設定しています。

メールアドレスとユーザ名を登録する

メールアドレスと名前を登録します。
この情報は誰がソースコードの変更を行ったのか知る時に必要になります。

ここで登録した情報は、Gitのリポジトリを全世界に公開した場合(GitHubソースコードや、プログラムを公開した場合)、全世界に公開される恐れがあります。
そのため、ここで登録する内容は全世界に公開されても問題ないようなユーザ名・メールアドレスにしてください。

ユーザ名は次のコマンドで設定することが出来ます。(ユーザ名にはあなたが設定したいユーザー名を入力してください。)

git config --global user.name "ユーザー名"

メールアドレスは次のコマンドで設定することが出来ます。

git config --global user.email "メールアドレス"
Column:メールアドレスとユーザ名が流出するとき、しないとき

以下の内容は先の記事で学習する内容が含まれているため、読み飛ばしても構いません。

ユーザ名やメールアドレスといった情報は、リポジトリに記録されています。(厳密に言うと違いますが、、、)
そのため、リポジトリを持っている人間がユーザ名・メールアドレスを閲覧出来ることになります。
自分一人だけにしか公開していない場合リポジトリを持っているのは自分だけですから、ユーザ名・メールアドレスがほかの人に閲覧されることはありません。
しかし、友達等とリポジトリを共有するとその友達はメールアドレスやユーザー名を閲覧することが出来ます。
またリポジトリGitHubに上げるなどして全世界に公開した場合(非公開にすれば閲覧は出来ない)、世界中のあらゆる人間がリポジトリをダウンロードし、あなたが設定したユーザ名・メールアドレスを閲覧することが出来る状態になります。

上手くいかない時は

以上の記事を試してもうまくいかない時は、この記事のコメント欄か私のTwitterに質問を送ってください。

次回予告

次回は、gitで頻繁に行う操作である「コミット」について詳しく解説します。

この記事について

この記事について、誤字や間違っている所がある場合は私のTwitterか、コメント欄から連絡をお願いします。

参考文献

Pro Git

Git,GitHubの使い方について、非常に詳しく丁寧に解説されています。
ですが、内容が初心者には難しいと思われるため一度入門記事等を読んで一通りGit,GIthubを勉強してから読まれると理解が深まると思います。
pdf形式であれば、日本語版が無料で公開されています。 git-scm.com

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

terapotan.hatenablog.jp

【gitをソフト開発で使いこなそう!:第1回】gitって何だ?

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

バージョン管理システムって?

Gitはバージョン管理システムの一つに当たります。
ですが、そもそもバージョン管理システムとは何でしょうか。

バージョン管理システムとは、その名の通りファイル(Gitではテキストファイル)の変更履歴を記録するためのシステムを言います。
下で具体的にバージョン管理システムを使うことへのメリットを挙げていきます。

バージョン管理システムを使う場面

ソフト開発

あなたがプログラムを制作していてふと「あ、この変更取り消したいな」と思ったとします。
この時、ただフォルダにソースコードが置いてあるだけだと既にファイルを保存した後の場合、変更を取り消すことが出来ません。

しかし、Git等のバージョン管理システムを使っていると変更を簡単に取り消すことが出来ます。

https://cdn-ak.f.st-hatena.com/images/fotolife/t/terapotan/20190826/20190826190900.png

多人数開発

あなたとあなたの友人でソフトを共同開発することになったとします。
この場合、バージョン管理システムを知らなければソースコードDropBox等に挙げて管理するのではないでしょうか。
ですが、この管理方法には以下に挙げるような問題点が複数存在します。

  1. 自分の知らない所で勝手にファイルが書き換わっている可能性がある。また、書き換わっていたことに気づいてもどこが書き換わっているのか把握することは不可能。
  2. 逆にせっかく自分が編集したものが知らない間に消滅したり、変更されたりしている可能性がある。
  3. 誰がどのファイルを編集したのかが分からない。
  4. ファイルを編集したくても、ほかの人が自分の編集したいファイルを編集しているときは編集できない

バージョン管理システムを使うと、これらの問題を解消することが出来ます。

Gitはどうやってバージョンを管理するのか

変更の単位-コミット

Gitにファイルの変更履歴を記録するには、コミットという操作を行う必要があります。
コミットを行うとコミットを行った時点のファイルの情報が格納されます。 従って「ファイルに変更を加える->コミット」という操作を複数回行うことによって、結果的にファイルの変更履歴を記録することになります。

具体的なコミットの操作は、後の章で解説します。今はコミットという操作を行えば変更履歴を記録できるんだな程度の理解で構いません。

ローカルリポジトリとリモートリポジトリ

ファイルやファイルの変更履歴をひとまとめにして置いておく場所のことをリポジトリと言います。そのうち自分のPC上で管理しているリポジトリのことをローカルリポジトリ、複数人で共有するためにサーバー上で管理しているリポジトリのことをリモートリポジトリと言います。

普段はファイルの変更履歴はローカルリポジトリで管理されています。ですがその変更履歴を複数人で共有したい時に、変更をリモートリポジトリに反映させることが出来ます。
もちろん、リモートリポジトリに反映された変更をローカルリポジトリに取り込むことも出来ます。

https://cdn-ak.f.st-hatena.com/images/fotolife/t/terapotan/20190826/20190826191438.png

このような仕組みにすることで、複数人でファイルを共有することが出来ます。
具体的な操作は後の章(本連載の後半になるかな?)で詳しく解説します。
ここでは、ローカルリポジトリとリモートリポジトリの用語の意味を理解する程度で構いません。

Gitを実際に使うには?

大きく分けて、コマンドラインGUIツールが存在します。

GUIツールでGitを使う

GUIツールでGitを使う場合、操作のたびにマウスで操作する必要があります。
操作が直感的でわかりやすいため、操作方法を習得するのにそれほど時間がかかりません。
しかしGUIツールごとによって操作方法が異なる場合が多く、GUIツールの乗り換えはある程度の努力を必要とします。

コマンドラインでGitを使う

コマンドラインでGitを使う場合、git initgit commitといったコマンドを打って作業を行います。
最初はコマンドの操作方法を覚えるのに時間がかかりますが、慣れて来ればGUIツールより高速に操作を行えるようになります。
またGUIツールは、ツールやツールのバージョンによって、操作方法が異なる場合が多いですがコマンドラインであれば操作方法はどのコマンドラインを使っても同じです。

本連載では、解説の都合上コマンドラインを使ったGitの操作方法を解説していきます。

次回予告

次回は、PCにGitをインストールしてGitを実際に使ってみます。

参考文献

Pro Git

Git,GitHubの使い方について、非常に詳しく丁寧に解説されています。
ですが、内容が初心者には難しいと思われるため一度入門記事等を読んで一通りGit,GIthubを勉強してから読まれると理解が深まると思います。
pdf形式であれば、日本語版が無料で公開されています。 git-scm.com

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

terapotan.hatenablog.jp

【gitをソフト開発で使いこなそう:第0回】この連載を読む前に

大まかな内容

この連載では、git,GitHubを初めて使う人・そもそもバージョン管理システム自体を使うのが初めてだという人向けにgit・GitHubの使い方を解説していきます。

この連載の読み方

コラム

記事を読んでいくと、下のようなコラムが出てくることがあります。

Column:コラム

これは、文字通りコラムです。
コラムですから、必ずしも読んで理解する必要はありません。
「あーわからん」と思うのであれば、どんどん読み飛ばしてください。

番外編

番外編も同じく「読むのが面倒くさい」「早く次に進みたい」と思うのであれば、読み飛ばしても構いません。

コラム・番外編ともに本文よりも難しい内容が入っている場合が多いです。

検索する、他の書籍・サイトをあたる

「この連載だけで勉強しなければならない」という決まりはありません。
いまいちピンとこない部分があれば、他の資料を使って勉強しても良いのです。

質問する

記事を読んでいくと、「どうしてこうなるんだ?」と言った疑問が出てくると思います。
そういう時は、ぜひ私に質問してください。
下のコメント欄からでも構いませんし、Twitterでも構いません。
質問内容を公開したくないのであれば、メールで送るという手もあります。

メールアドレスは、ページ右上に記載しています。

その他

連載は、全14回となっています。 第1回の記事、連載記事一覧は下のリンクからご覧ください。

次回の記事

terapotan.hatenablog.jp

連載記事一覧

terapotan.hatenablog.jp

【Visual Studio 2017入門:最終回】Microsoft Docsを使ってみよう!

前回の記事

terapotan.hatenablog.jp

今回は、LoadLibrary関数やFreeLibrary関数の詳細を調べるのに必要なMicrosoftDocsの調べ方について解説していきます。

公式ドキュメントを見たいとき

本連載の第9回でFreeLibrary関数を使用し、簡単な使い方を解説しました。
ですがどのようなときにどのような戻り値を返すのか、ほかに引数がないのかなど詳しいことまではわかりません。

このような場合、解説サイトを探すよりも公式ドキュメントを見たほうが詳しい情報がすぐに得られます。

Column:出来るだけ公式ドキュメントを見るようにしよう

公式ドキュメントは大抵わかりづらく、時には日本語で書かれていないこともあり読むのには労力を要します。

ですが、公式ドキュメント以外に書かれている情報は間違っていたり、誤解を招く表現がなされている場合があります。

読むのは少し大変かもしれませんが、今回をきっかけに出来る限り公式ドキュメントを読むくせを付けましょう。

Microsoft Docs

Microsoft Docsとは

Microsoft Docsとは、WindowsやVisualStudioなどMicrosoft製品に関するドキュメントが存在するサイトのことです。
以下のリンクから、Microsoft Docsトップページに飛ぶことが出来ます。
docs.microsoft.com

今回は、FreeLibrary関数の公式ドキュメントをMicrosoft Docsから探して行きます。

探し方

Microsoft Docsには大量のドキュメントが存在するため、ドキュメントを1つ1つ見ていくことは出来ません。

検索機能を使うと、大量のドキュメントの中から探したいドキュメントを探すことが出来ます。

上のリンクからMicrosoft Docsトップページに飛び、ページ上部の検索をクリックし「FreeLibrary」と入力します。
alt

すると以下のような検索結果が出てきます。今回探している文書は赤枠で囲んでいる「FreeLibrary function (libloaderapi.h) 」であるため、これをクリックします。

alt

FreeLibrary関数についての詳細な解説が表示されます。

文書は基本英語で書かれています。日本語に翻訳されていることもありますが、大抵は機械で日本語に翻訳されておりまともに読めない場合がほとんどです。

最後に

これでVisualStudio2017入門は終わりとなります。

本連載記事はVisualStudio2017の機能の一部を解説したにすぎません。この連載記事を読んでもっとVisualStudio2017やプログラミングを学んでいってください。

前回の記事

terapotan.hatenablog.jp

連載記事一覧

terapotan.hatenablog.jp

【Visual Studio 2017入門:第12回】コードスニペットって何?どうやって使うの?

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

terapotan.hatenablog.jp

前回はショートカットの有用性や使い方、新しいショートカットキーの設定方法について解説しました。

今回はコードスニペットとは一体何なのか、コードスニペットの使い方と設定方法について解説していきます。

コードスニペットとは?

コードスニペットとは、ソフト開発時に簡単に挿入できるようにあらかじめ作成されたコードを指します。

ですが「簡単に挿入できるようにあらかじめ作成されたコード」なら「コピペ」も当てはまりそうです。

「コピペ」と「コードスニペット」は一体何が違うのでしょうか。

Column:コード「スニペ」ットです。

この記事を書くまで、コードスニペットのことをコード「スペニ」ットと間違えて覚えていました。
こんな風に間違えるのは私だけかもしれませんが、みなさんは間違えないように気を付けてください。

コピペとコードスニペット

コピペは、過去に書いたコードと全く同じコードを書く場面でないと用いることが出来ません。
ソフト開発において、過去と全く同じコードを書く場面はほとんどないためコピペだけでは入力の手間を省くことは不可能です。

ですが、全く同じコードを書く場面はなくても似たようなコードを書く場面なら存在します。

例えば下のような例です。

過去書いたコード

Ball ballInstance = new Ball();

今書こうとしているコード

Block blockInstance = new Block();

変数名やクラス名は異なりますが、文全体を見るとよく似ていることがわかります。

このような場合に「文の構造だけ呼び出して変数名、クラス名は後で書き換えられる」ようにすれば、入力の手間を大きく省くことが出来ます。
これこそがまさしくコードスニペットと呼ばれる機能になります。

コードスニペットを使ってみる

では、実際にコードスニペットを使ってみましょう。

コードスニペットを呼び出すにはエディタ上の挿入したい場所でCtrl+Spaceを押します。(Spaceはスペースキーを表します。)

続いてforと入力します。すると、プルダウンメニューにforが表示されEnterキーを押すとfor文のコードスニペットが挿入されます。

背景が白色の部分は、コードスニペット挿入後に値を変更することが出来ます。

Tabキーを押すことで、次の値を変更するところへ移動することが出来ます。

alt

Column:他のコードスニペットもあるの?

今回は、for文のコードスぺニットしか解説しませんでしたが他にもC++であればswitch文やif文、while文などのコードスぺニットが存在します。

いずれもCtrl+Spaceを押してswitch,if,whileと入力すれば上と同様にコードスニペットを呼び出すことが出来ます。

コードスニペットを追加する

前節では既存のコードスぺニットを使用しましたが、本節では自分でコードスニペットを作成してみましょう。

.snippetファイルを作成する

コードスニペットを作成するには、コードスニペットの内容を定義したファイルを作成する必要があります。(xml形式のファイル)

適当な場所にTestCode.snippetを作成し、以下の内容を入力してください。(内容の説明は後述)

<CodeSnippets>
  <CodeSnippet Format = "1.0.0">
      <Header>
          <Title>classNew</Title>
          <Shortcut>classNew</Shortcut>
      </Header>
  
      <Snippet>
          <declarations>
            <Literal>
              <ID>classType</ID>
              <default>classType</default>
            </Literal>

            <Literal>
              <ID>className</ID>
              <default>classType</default>
            </Literal>

            <Literal>
              <ID>constructor</ID>
              <default>argument</default>
            </Literal>
          </declarations>
          <Code Language="CPP">
              $classType$* $className$ = new $classType$($constructor$);
          </Code>
      </Snippet>
  </CodeSnippet>
</CodeSnippets>

ファイルをインポートする

VisualStudio上でCtrl+K,Ctrl+Bを押しコードスニペットマネージャーを開きます。

alt

コードスぺニットマネージャーの言語の下にあるプルダウンメニューをクリックし、Visual C++を選択します。
alt

続いて、ウィンドウの下側にあるインポートをクリックし、先ほど作成したTestCode.snippetをクリックしてOKを押します。
これで作成したコードスニペットがVisualStudio上で使用できるようになりました。

エディタ上でclassNewを入力して、コードスニペットを呼び出せるようになったはずです。
alt

ファイルの解説

コードスニペットの定義ファイルはXMLと呼ばれる形式で書かれています。

1行目:CodeSnippets

先ほど作成したTestCode.snippetを上から順番に見ていくことにします。

1行目には<CodeSnippets>と書かれています。これは、19行目の</CodeSnippets>と対になっています。<CodeSnippets></CodeSnippets>の中に後述する<CodeSnippet>を入れることで一つのファイルで複数のコードスニペットを定義することが出来ます。

<CodeSnippets>
<!-- この中に複数の<codeSnippet>を入れて複数のコードスニペットを定義できる-->
<CodeSnippets>……</CodeSnippets>
<CodeSnippets>……</CodeSnippets>
</CodeSnippets>

2行目:CodeSnippet

<CodeSnippet></CodeSnippet>で一つのコードスニペットを定義しています。
Format = "1.0.0"という部分はバージョンを表すようですが、具体的なバージョン番号のつけ方は公式ドキュメントに記載がなかったため不明です。

3行目:Header

<Header></Header>コードスニペットのタイトルとショートカット文字列(Ctrl+Spaceを押したときに表示される文字列。検索の際用いる)を設定しています。5行目の<Title>コードスニペットのタイトルを6行目の<Shortcut>でショートカット文字列をそれぞれ設定しています。

25行目:コードスニペットの定義

少し飛ばして先に<Code>の解説から行います。
<Code></Code>で挿入する文字列の定義を行います。
基本ここで入力した文字列がコードスニペットを呼び出したときに挿入されることになります。

<Code>のLanguageは今定義しようとしているコードスニペットがどの言語で呼び出されるかを指定するものです。
今回指定しているCPPはこのコードスニペットC++でしか呼び出されないことを意味します。
Languageで指定した言語以外の言語ではCtrl+Spaceを押してショートカット文字列を入力してもコードスニペットを呼び出すことが出来なくなります。

置換文字列(コードスニペットを呼び出したときに書き換えられる文字列)を挿入したい場合は$で特定の文字列を囲みます。この特定の文字列は<Code>の上にある<Literal>で定義します。

10行目:Literal

一つの<Literal>で一つの置換文字列を定義します。
<ID>で置換文字列を設定し、<Default>で置換文字列に最初から入っている値を設定します。
<Literal><declartions></declartions>で囲む必要があります。

コードスニペットの公式ドキュメント

コードスニペットについてもっと詳しく知りたい方は以下のリンクから、VisualStudio2017のコード スニペット スキーマ リファレンスをご覧ください。
各要素の意味について詳しく載っています。

docs.microsoft.com

次回予告

次回は、VisualStudioの公式ドキュメントの読み方・探し方について解説していきます。
次回で最終回となる予定です。

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

terapotan.hatenablog.jp

【Visual Studio 2017入門:第11回】ショートカットキーを使ってみよう!

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

terapotan.hatenablog.jp

今回は、VisualStudio2017でよく使われるショートカットキーや自分でショートカットを設定する方法について解説します。

ショートカットを使うと何がいいのか

「別にショートカットキーなんて覚えなくても、マウスで操作できるんだからいいじゃん」と思う人もいるかもしれません。
確かにたまにしかしない操作であればそれでも構わないでしょう。

しかし以下の操作はどうでしょうか。

  • コピー&ペースト
  • 上書き保存
  • 切り取り

これらの操作は毎日何十回と実行する操作です。1回あたりにかかる操作時間は短いですが、毎日何十回と実行すればその実行時間は非常に大きいものとなります。

ショートカットキーを覚えたての頃は面倒に感じるでしょうが、慣れればマウスで操作するほうが面倒に感じるはずです。

VisualStudio2017でよく使うショートカットキー

一般的なエディタで使われるCtrl+C(コピー),Ctrl+V(貼り付け)以外にもVisualStudioには便利なショートカットキーが最初から設定されています。
ここではその一部を解説していきます。

Column:ショートカットキーの表記方法について

ショートカットキーとしてCtrl+Cと書かれていた場合Ctrl(コントロールキー)とCキーを同時押しするという意味です。
またCtrl+C,Ctrl+Sのように表記されていた場合Ctrl+C(CtrlキーとCキーを同時押し)をしてから続いてCtrl+S(CtrlキーとSキーを同時押し)をするという意味です。

コメントアウト

コメントアウトしたい行を選択してCtrl+k,Ctrl+cを押します。

コメントアウトする前

int a = 0;
a++;

コメントアウトした後

//int a = 0;
//a++;

見てわかる通り、ブロックコメント(/* */)ではないため注意が必要です。

コメントアウトを解除したい場合はコメントアウトしたい行を選択して、Ctrl+k,Ctrl+uを押します。

ソリューションエクスプローラーを開く

ソリューションエクスプローラーを開くにはCtrl+Alt+Lを押します。
ソリューションエクスプローラーが既に開いている場合には、操作対象がソリューションエクスプローラーに切り替わります。
操作対象がソリューションエクスプローラに切り替わるとソリューションエクスプローラーに存在するファイルを矢印キーで選択してEnterキーで開くことが出来ます。

表示するタブを切り替える

表示するタブを切り替えるにはCtrl+Alt+PageDownCtrl+Alt+PageUpを押します。(前者は左側のタブ、後者は右側のタブに表示を切り替える)

またある特定のタブに切り替えたい場合は、Ctrlキーを押しながらTabキーを押します。

すると下の画像のようなメニュー画面が開き、矢印キーで表示するタブを選択することが出来ます。
alt

Ctrlキーを放すと選択したタブが表示されます。

一行削除する

ショートカットキーを使って1行を削除するにはCtrl+Shift+Lを押します。

ショートカットキーを押す前

int a;
int b;//この行を選択してCtrl+Shift+Lを押す
int c;

ショートカットキーを押した後

int a;
int c;

一行を移動する

一行をそのまま上に移動させたい場合は移動したい行を選択してAlt+↑を押します。(下に移動させたい場合はAlt+↓を押します。)

これを利用して下のコードの1行目と2行目を入れ替えることが出来ます。

int test2;
int test1;

2行目を選択してAlt+↑を押すことで2行目が1行目に移動し、結果として1行目と2行目が入れ替わります。

alt

新しいショートカットキーを設定する

ある特定の動作に対してショートカットキーが設定されていない場合、新たにショートカットキーを設定することが出来ます。

今回は初期状態ではショートカットキーが設定されていない「プロジェクトのみビルド」に対してショートカットキーを設定していきます。

オプション画面を開く

メニューバーのツール-オプションをクリックし設定画面を開きます。
alt

ショートカットキーの設定を行う

alt

ショートカットキーを設定する動作を選択します。
設定する動作を検索するには上の画像の以下の文字列を含むコマンドを表示の下のテキストボックスにキーワードを打ち込みます。今回は、ビルドと打ち込んでいます。

続いてショートカットキーのテキストボックスをクリックしCtrl+Shift+\を押します。
このショートカットキーが既に使われている場合、現在使用されているショートカットに使用されている動作が表示されます。

設定が完了したらOKを押してください。

ソリューションエクスプローラーでビルドしたいプロジェクトを選択してからCtrl+Shift+\を押すと選択したプロジェクトだけがビルドされます。

次回予告

次回は、コード入力を強力に支援してくれるコードスニペットについて解説します。

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

terapotan.hatenablog.jp

【Visual Studio 2017入門:第10回】スタティックリンクライブラリはどうやって作る?

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

terapotan.hatenablog.jp

今回はVisualStudio2017でどうスタティックリンクライブラリを作ればいいかわからない方向けにスタティックリンクライブラリの作り方を解説します。
記事を読みながら、実際にスタティックリンクライブラリを作成してみてください。

DLLとどう違う?

恐らくスタティックリンクライブラリについて調べると「DLL(ダイナミックリンクライブラリ)」という言葉も一緒に出てくるのではないでしょうか。
どちらも「ライブラリ」という言葉がついていて何となく似ているような気がします。何が具体的に違うのでしょうか。

リンクするタイミング

ライブラリをプログラムで使うにはライブラリをリンクする必要があります。
DLLはプログラムの実行時に、スタティックリンクライブラリは実行可能ファイル(exe)作成時にそれぞれリンクされます。

ライブラリを置く場所

DLL,スタティックリンクライブラリでリンクするタイミングが違うためライブラリ本体のデータが置かれる場所も異なります。
DLLはプログラム本体とは別のファイルとして置かれますが、スタティックリンクライブラリはプログラム本体の中に含めて置かれます。外から見るとプログラム本体のファイルしかないように見えます。

どちらを使ったほうがいい?

どちらも長所・短所があり、一概には言えません。

DLLではプログラム本体とライブラリ本体を分けて管理するため「ライブラリだけ差し替える」ということが可能になりますし、一つのDLLを複数のプログラムで使用することも出来ます。
しかしプログラム本体のバージョンとライブラリのバージョンがずれる危険性があります。

スタティックリンクライブラリではプログラム本体にライブラリを一緒に含めるためバージョンがずれる危険性は低くなっていますが、DLLでは出来た「ライブラリだけを差し替える」といったことは出来なくなりライブラリを複数のプログラムで共有することも出来ません。

スタティックリンクライブラリの作り方

プロジェクトを作る

スタティックリンクライブラリを作るには、スタティックリンクライブラリを作成するためのプロジェクトを作成する必要があります。

プロジェクトの新規作成画面を開き、「スタティックリンクライブラリ」をクリックしてください。
alt

ファイルを追加する

ライブラリ本体のコードを書くファイルをプロジェクトに追加する必要があります。
以下の内容のstaticLib.cppstaticLib.hを追加してください。
static.cpp

#include "stdafx.h"
#include "staticLib.h"

EXPORT int retAddNum(int a, int b) {
    return a + b;
}

staticLib.h

#pragma once
#include<windows.h>
#define EXPORT extern "C"
EXPORT int retAddNum(int a, int b);

スタティックリンクライブラリを出力する

プロジェクトをビルドするとスタティックリンクライブラリが出力されます。
ライブラリを他人に配布する場合はRelease構成にしてビルドしてください。

ビルドに成功していれば、Debugフォルダ(Release構成でビルドした場合はReleaseフォルダ)に[プロジェクト名].libというファイルが存在するはずです。
これがスタティックリンクライブラリとなります。

Column:なぜビルドするだけでライブラリが出力されるのか

特に何の設定もしていないのになぜある時にはexeファイルが出力され、ある時にはライブラリが出力されるのでしょうか。

それは、プロジェクトを新規作成するときに選択したプロジェクトが違うからです。

プロジェクトのプロパティを開くと分かりますが、プロジェクトには非常に多くの設定が存在します。この設定項目を人力でプロジェクトを作成するたびに設定するのは非常に面倒です。

さらに利用目的ごとに大体の設定内容は決まっています。
そこで設定内容をまとめておいてプロジェクト作成時に呼び出して、プロジェクトを作成するようにします。この「プロジェクトの設定内容」のことをプロジェクトテンプレートと呼びます。

プロジェクト新規作成時に選択していたのはプロジェクトテンプレートであり、プロジェクトテンプレートごとに設定内容が既に記録されていたため、何の設定もしなくてもよかったというわけです。

もう一つプロジェクトを作成する

スタティックリンクライブラリをプログラム中で呼び出せるか確認するために、テスト用のプロジェクトを先ほど作成したプロジェクトと同じソリューションの中に作成します。
作成するプロジェクトの種類は「Windows コンソール アプリケーション」にしてください。

詳しいプロジェクトの作成方法については 第6回をご覧ください。

コードを入力する

テスト用プロジェクトに作成されているConsoleApplication1.cppに以下の内容のソースコードを入力してください。

#include "pch.h"
#include <iostream>
#include "../static/staticLib.h"


int main(void) {
    int retNum;
    retNum = retAddNum(2, 3);
    std::cout << retNum << std::endl;
    return 0;
}

リンクの設定を行う

ビルド時に作成したスタティックリンクライブラリをプログラム本体にリンクする設定をする必要があります。

ソリューションエクスプローラーの[テスト用プロジェクトの名前]をクリックし、メニューバーのプロジェクト-[テスト用プロジェクトの名前]のプロパティをクリックします。
すると以下のようなウィンドウが表示されます。
alt

続いて右のメニューからリンカー-入力をクリックし、追加の依存ファイルの右のほうにあるボタンをクリックします。
alt

入力画面が表示されますので、下の文字を入力します。

$(SolutionDir)Debug\static.lib

最後にプロパティ画面のOKを押して設定は完了です。

ビルドし実行する

テスト用のプロジェクトをビルドして実行します。
5という値がコンソール上に表示されればスタティックリンクライブラリを正しく呼び出せています。

次回予告

次回は、VisualStudio2017でよく使うショートカットについて解説します。

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

terapotan.hatenablog.jp