家族について考えるパパのブログ

普段の生活をいかに快適に過ごすかを考えて実践をしていくブログ

【初心者エンジニア向け】技術の学び方

こんにちは。

先輩から技術の学び方(初めの一歩)について話をしてもらったので、備忘録的にここにまとめようと思います。

 

技術の学び方のポイント

・モノを作ろうと思うこと

・モノを作るために必要な技術を調査すること

ソースコードを書く際はお手本を探すこと

 

アンチパターン

・技術ありきでスタートすること

・独自の書き方をしないこと

 

ポイント1 

モノを作ろうと思うこと

学ぶ際のポイントの1つ目は、何かモノを作ろうと思うことです。

技術を学ぶ際には、ある特定の技術に目がいきがちです。

しかしそうではなく、「モノを作るために必要な技術を学んでいく」というプロセスにした方が良いです。

 

ポイント1とする理由

この理由はモチベーションの維持です。

何も作るモノがなく、ただ技術を学ぼうとすると後々モチベーションを維持することが難しくなってきます。

作りたいモノを設定して、その過程で技術を学んだ方がモチベーションが持続するでしょう。

きっと、何かの理論で証明されているはずです。

 

ポイント1の具体例

僕の場合では仕事に関係する部分で近いSpring Bootを学習しようと思っていました。

ただただ、技術を学習しようと思ってました。

そうではなく「何かを作りたい、そのためにはSpring Bootが一般的に使われている。だからSpring Bootを使って学ぶ」という状況にしないといけません。

過去、自分があまり継続的に技術を学べない理由はこれだったのかもしれません。

これは重要な視点だと思うので、アンチパターン「技術ありきでスタートしない」としても表現しました。

 

ポイント2

モノを作るために必要な技術を調査すること

先ほど、以下の話を出しました。

「何かを作りたい、そのためにはSpring Bootが一般的に使われている。だからSpring Bootを使って学ぶ」という状況にしないといけません。

この中の「一般的に使われている」ということはエンジニアとして生きていく上で考えなければならないポイントです。

 

ポイント2とする理由

それは「普通のエンジニアであれば、こういう風にこの技術を使う」ということが「一般的に使われている」の意味だからです。

大人数で開発をするような会社で将来的に働くなどを考えている場合は、みんなが普通に使う技術を普通に使えるようにならなければいけないからです。

 

ポイント3

ソースコードを書く際はお手本を探すこと

何かのコンポーネントを作るなどソースコードを書く際には、お手本のソースコードを探すことが必要です。

 

ポイント3とする理由

世の中の普通のできるエンジニアはベストプラクティスとなるソースコードの書き方を知っています。

そのエンジニアがあなたのソースコードを読んだ時に、ベストプラクティスと呼ばれるような書き方をしていない場合「この人は学習しない人なのではないか」と疑われてしまう要因になります。

例えば、将棋などにも定石があり、それに則っていないと素人だと思われてしまうのと同じようなものです。

このポイントはアンチパターン「独自の書き方をしないこと」としても上げました。

 

まとめ

エンジニアとして心得るべきポイントは、仕事で通常意識するようなポイントと近いものでした。

今の時代に生きている僕たちは先人の肩の上に乗れるように工夫をして物事を進めるべきだと思います。

 

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

ランニングで仕事のパフォーマンスが向上する

こんにちは。

最近、ランニングを自分自身で行っているのですが、

ランニングでパフォーマンスが向上する理由について説明しようと思います。

 

目次

 

パフォーマンスが向上する3つの理由

前頭前野が活性化することによってそもそもの脳の能力がUpする!

・ストレスを解消することによってパフォーマンスがUpする!

疲労感が軽減されていつでも万全な状態で挑めるようになる!

 

パフォーマンス向上を目的とする際に気を付けること

・長時間のランニングは脳にとってマイナスとなる

 

 根拠1:エンドルフィンによって、疲労感やストレスが軽減される

エンドルフィンとは

幸せな気持ちをもたらすホルモンであり、脳内麻薬とも呼ばれることがある。

ストレスや疲労でエンドルフィンの分泌量が減ります。

その状態になるとノルアドレナリンという興奮ホルモンの分泌量が増え、不安や興奮を感じるようになると言われています。

 

エンドルフィンの効果

分泌されると気分の鎮静効果があり、それによって快適な気分になる。

この効果はランナーズハイの一因になっていると言われている。

 

エンドルフィンの効果を得るために

走り始めから15分程度で分泌が行われます。

そして、その効果は3~5時間持続すると言われています。

そのため15分以上のランニングを行うことが必要です。

 

根拠2:セロトニンが分泌されることによって、疲労感やストレスを解消する

セロトニンとは(その効果は?)

セロトニンは不安感や恐怖感に影響を与えます。これが不足することによって精神的に落ち着いた状態にいられなくなります。

また、体自体の疲労感にも影響を与えセロトニンが十分にある状態だと痛みが和らぐという効果もあります。(アクティブ・レストという考え方の根拠にもなっています)

 

セロトニンの効果を得るために

セロトニンは、5分以上のランニングで分泌が開始され30分ほどで十分な量のセロトニンを得ることができます。

 

セロトニンの効果を半減させてしまう行為

セロトニンは長い時間のランニングをすると減ってしまうということも言われています。

長い時間というのは個人差がありますが、目安としては「きつい」と感じる程度です。

セロトニンの効果を得るために「疲れるまでやる」ことはしないようにしましょう。

 

根拠3:論文で前頭前野が活性化されることが証明された

おすすめの本を紹介します

脳研究の第一人者である京都大学の久保田競教授の研究によって証明されています。

これについては、詳しいことは本を参考にするべきでしょう。

 

要約すると、「走ることは脳に良い。そして、頭がよくなる」ということが言われています。 

 

さいごに

ランニングにはさまざまなメリットがあります。

今回紹介できたものは仕事に向けたパフォーマンス向上という一側面の一部分しか紹介ができていません。

そのため、皆さんももっといろいろな記事などを読んでランニングの良さを認識していただけると幸いです。

 

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

 

Siteライフサイクルについて

こんにちは。

 

Siteライフサイクルを使ってみたので、メモしておきます。

siteライフサイクルは、プロジェクトのドキュメントを作成することができる。
実行コマンドは、以下のコマンドです。
mvn site
当然ですが、既にプロジェクトが存在するところで実行してください。

僕は、初め何もないところで打ってしまって、以下のようなエラーメッセージが出てしまいました。
[ERROR] The goal you specified requires a project to execute but there is no POM in this directory (/Users/TakahitoNakashima/PracticeAtHome/siteDir). Please verify you invoked Maven from the correct directory. -> [Help 1]

ちゃんと存在するところでやれば問題無いです。

このコマンドを実行するとtarget以下にsiteディレクトリが作成されます。

そのディレクトリ内のindex.htmlを開くとプロジェクトのドキュメントのページが開きます。

ドキュメントの中身はpom.xmlを修正することによって、変更することができます。
pomを修正したら、
mvn cleanコマンドとmvn siteコマンドを打って更新します。

各種プラグインも追加することができます。
ex.)
Javadocプラグイン
 ・Unit Test Reportプラグイン
 ・Code Coverageプラグイン 等

 

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

どうやって複数のモジュールがあるプロジェクトをビルドするかについて

こんにちは。

 

「どうやって複数のモジュールがあるプロジェクトをビルドするか」について学んだのでそれについて、メモしておきます。(まだ自分の中では消化しきれてないです。。)

この話の中では、大きなプロジェクトになっているてユーザーインターフェースを提供するようなwebアプリケーション(WAR)と各サービス層のコードを持っているサービスプロジェクト(JAR)、そして永続的なプロジェクトがあるとします。

vn archetype:generate -DgroupId=com.apress.gswmbook -DartifactId=gswm-parent -Dversion=1.0.0-SNAPSHOT -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=pom-root

これをすると、pom.xmlファイルが作成されます。
親プロジェクトのpackagingのtypeにはpomが入ります。

そして、親プロジェクトの中にwebプロジェクトを作成します。

mvn archetype:generate -DgroupId=com.apress.gswmbook -DartifactId=gswm-web -Dversion=1.0.0-SNAPSHOT -Dpackage=war -DarchetypeArtifactId=maven-archetype-webapp

そして次に、serviceプロジェクトを作成します。
mvn archetype:generate -DgroupId=com.apress.gswmbook -DartifactId=gswm-service -Dversion=1.0.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

この maven-archetype-quickstartをつけるとJARプロジェクトを生成するので、packageパラメーターを指定していません。
また、 -DinteractiveMode=false を使用すると対話モードで起動されない。

また、最後にJavaプロジェクトを作成します。
mvn archetype:generate -DgroupId=com.appress.gswmbook -DartifactId=gswm-repository -Dversion=1.0.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

これらのコマンドを実行して、プロジェクトの作成を行うと

親POMには、子moduleが登録されています。
<modules>
<module>gswm-web</module>
<module>gswm-service</module>
<module>gswm-repository</module>
</modules>
こんな感じで。↑

この状態で、maven packageコマンドを入力するとbuildをします。

 

 

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

mavenでのWebプロジェクトの作成について 〜起動まで〜

こんにちは。

 

Webプロジェクトの作成について学んだのでメモしておきます。


maven-archetype-webappでwebアプリケーションの作成ができる機能をmavenは提供している。
それは、以下のコマンドで実行できる。

mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp

このコマンドは実行時に対話モードで実行する。
そのため、いくつか入力を求められる。
求められる内容は
groupId、artifactId、version、packageになる。

archetype:generateコマンドで作成されたpom.xmlファイルにはJUnitの依存関係だけが記されている。
Mavenで簡単にwebアプリケーションの実行をできるようにするために、TomcatやJettyのようなWebサーバーを埋め込むことが必要です。

<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>

こんな感じで。↑

また、mvnではtomcat起動のコマンドもあります。

mvn tomcat7:run

これで起動します。

 

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

全然読む用の文章になっていない気もしますが、すみません。。

Plug-in開発の仕方について

こんにちは。

 

Plug-in開発の仕方について学んだのでメモしておきます。

ここでは、Mojoというワードが出てきます。
Mojoとは、Maven old java objectsのことです。
それは、1つのゴールを実行するjavaオブジェクトを指します。

Pomファイルには、maven-plugin-apiの依存関係を追加します。
なぜなら、プラグイン開発をするためです。

Pomファイルの準備ができたら、次はMOJOの作成をします。
ここで一番大切なことは、Javaのコメント部分に以下のものを記すことです。
@goal hello
ここでは、このgoalはの名前はhelloであることを示しています。

そして、最後にplug-inのインストールを以下のコマンドで行います。
mvn install

これがSuccessすれば、プラグインとして使用することができます。
そのコマンドは、
mvn pluginId:goalId です。

 

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

Buildプロセスのタスクについて

こんにちは。

 

Buildプロセスのタスクについて学んだのでメモしておきます。

 

Buildのプロセスにはいくつものタスクが入っている。
それをMavenではgoalという概念で表そうとしている。

例えば、Compile goalではJavaのクラスをコンパイルしてclassファイルを作成する。
そのコマンドは以下のもの。
mvn compiler:compile

他には、Clean goalというものもある。
これは、target folderの中身を消去する。
そのコマンドは以下のもの。
mvn clean:clean

この「:」の前のcleanは、cleanプラグインを表している。
「:」の後ろのcleanはclean goalを表している。

 

mvnでgoalを実行するためには、以下のようにやることがわかる。
mvn プラグイン名:goal名

 

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

 

 

 

pom内の共通のプロパティについて

こんにちは。

 

pom内の共通のプロパティを定義する方法について学んだのでメモしておきます。

 

pom内の共通のプロパティを定義する際に
<properties></properties> を用いる。

この中で定義されたものをpomファイル全体で変数として活用することができる。

ex.
<properties>
<junit.version>4.11</properties>
</properties>

......

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>


こんな感じで使うんだとさ。

 

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

-bash: mvn: command not found について

こんにちは。

 

mvnコマンドをやろうとしたら、mvn: command not foundというエラーが出たのでそれを解決するまでをメモしておきます。

 

まず、今回このエラーが起きてしまった理由はmavenをダウンロードしておらず、当然ながらPATHも通っていなかったためです。

そのため、やったこととしてはインストールをしてPATHを通しました。

 

mavenのダウンロード

ダウンロードは以下のリンクページにて行います。

https://maven.apache.org/download.cgi

その中で以下のリンクをクリックしてzipファイルを取得します。

apache-maven-3.5.0-bin.tar.gz

今回ダウンロードしたバージョンは、Apache maven 3.5.0でした。

zipファイルを任意の場所に解凍します。

 

解凍したら、そのファイルにPATHを通します。

vimコマンドを使用し、.bash_profileを設定します。

※.bash_profileとは

 存在していれば読み込まれる設定ファイルであり、ユーザー単位の設定を書くところです。

打つコマンドは

vim ~/.bash_profile

そこに

PATH=~/[ユーザー名]/[展開したフォルダ名]/apache-maven-3.5.0/bin:$PATH export PATH

を追記します。

 

そして、設定を反映するために以下のコマンドを打ちます。

source ~/bash_profile

 

これをした後に、

mvn -v

を押すと、mvnのバージョンが表示されるようになるはずです。

 

mvn: command not foundを解決するための方法はこれでした。

 

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

Dockerについて

こんにちは。

 

完全に初耳でポカーンとしてしまった「Docker」について調べたことをまとめておきます。ただ、これに関してはまだ全然理解できてないので継続的にもっと学んでいかなきゃいけない内容です。

 

Dockerとは

・Docker社(旧dotCloud社)のOSS

・コンテナ技術による仮想化ソフトウェア

 

Dockerの技術

・AUFS(Another Union File System)

・LXC(Linux Containers)

 

仕組み

dockerのFile System(AUFS)

 - Container

  → 一番上のwritableな層

 - Image

  → read-onlyな層

 - Base Image

  → 親を持たない一番下の層

 

Dockerをまとめると

・dockerは軽量で高速な仮想化環境を提供している

・AUFS、LXCの技術が使われいてる。

・Containerを変更・コミットしてImageを作る

 

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

 

参考にしたもの

【入門】Dockerとは?使い方と基本コマンドを分かりやすく解説します | カゴヤのサーバー研究室

超入門Docker:第1回 Dockerとは - @IT

Dockerとは|4つの特徴と基本的な使い方|フリエン

はじめてのdocker