ハードウェア技術者のスキルアップ日誌

某家電メーカーの技術者がスキルアップのために勉強したことを記録するブログです

Linuxコマンドまとめ④ - シェルスクリプト

Linuxの勉強の4回目。今回はシェルスクリプトです。

シェルスクリプトとは・・・
シェルのコマンドラインをあらかじめ記述しておくファイルのこと

仕事で使う際によく書き方を忘れてしまうので、これを機に使う頻度が高いもの、これから使ってみたいものを整理しておきます。

シェルスクリプトの基本

・1行目にシバン(スクリプトを実行するシェルを指定)を記載
  #!/bin/bash

・chmodで実行権限を与える

・以下のコマンドでシェルスクリプトを実行
  $ ./スクリプトのファイル名(.sh)

・変数の宣言は不要
 <変数名>=値 で代入可能 ※=の前後にスペースをつけないこと

・変数を参照するときは変数の前に$をつける ※代入時は不要

・変数名の区切りを明示するには${     }とする

 

位置パラメータ

コマンドライン引数を扱うための特別な変数

 $0     実行時のシェルスクリプト
 $1,2,3 …    コマンドラインの第1,2,3 …引数

$ ./test.sh A B C  # $1:A, $2:B, $3:C

 $#       引数の個数
 $@         引数をまとめて扱う

 

制御構造

if文

C言語等と同様、条件分岐

if [ コマンド1 ]; then
  # コマンド1が真の場合の処理 elif [ コマンド2 ]; then   # コマンド2が真の場合の処理 elif [ コマンド3 ]; then   # コマンド3が真の場合の処理 else   # 上記判定すべてが偽の場合の処理 fi
 
評価演算子

・文字列
str1 = str2        str1とstr2が等しい
str1 != str2       str1とstr2が等しくない
-n str1              str1が空文字列でない
-z str1               str1が空文字列である

・整数
int1 -eq int2         int1 = int2
int1 -ne int2         int1 ≠ int2
int1 -lt int2           int1 < int2
int1 -le int2          int1 ≦ int2
int1 -gt int2          int1 > int2
int1 -ge int2         int1 ≧ int2

・ファイル属性
-e file                 fileが存在
-d file                 fileが存在し、ディレクトリである
-h file                 fileが存在し、シンボリックリンクである
-f file                  fileが存在し、通常のファイルである
-r file                  fileが存在し、読み出し可である
-w file                 fileが存在し、書き込み可である
-x file                  fileが存在し、実行可である
file1 -nt file2      file1の変更時刻がfile2より新しい
file1 -ot file2      file1の変更時刻がfile2より古い

 

結合演算子

条件式1 -a 条件式2               条件式1 AND 条件式2
条件式1 -o 条件式2               条件式1 OR 条件式2
!条件式                                  条件式の真偽を逆にする(NOT)
()                                            条件式をグループ化する
コマンド1 && コマンド2      コマンド1が正常終了したときだけコマンド2を実行
コマンド1 || コマンド2         コマンド1が正常終了しなかったときだけコマンド2を実行

 

for文

C言語と同様、ループ処理
リストの中1つ1つに対してdoからdoneの間を繰り返し処理する

for 変数名 in リスト
do
   # 繰り返す処理
done

※リストにはパス名展開(*.txtなど)や数値列を作成するseqコマンドなどが使用できる

 

case文

C言語におけるswitch文に近い
指定の文字列がパターンにマッチするかを判断し、マッチしたパターンに
対応する処理を行う

case <文字列> in
    <パターン1>)
          # 処理1
          ;;
    <パターン2>)
          # 処理2
          ;;
esac

※<パターン>には*, ?も使用可能 |を使用し、OR条件にすることもできる

 

while文

C言語と同様、指定した条件が真である限り繰り返し処理をする
コマンドが真の間だけループを回す

while <コマンド>
do
         # 繰り返し処理
done

 

シェル関数

シェルスクリプト内で使用する関数を定義できる ※使うより前に定義が必要

<関数名> ()
{
       # 処理
}

 

変数

明示しなければグローバル変数になる
関数内だけのローカル変数とするには変数の前にlocalをつける

 

その他シェルスクリプトでよく使うコマンド

xargsコマンド

標準入力に対し、指定したコマンドを実行
 $ xargs <実行したいコマンド>
  
→<コマンド> [標準入力から受け取った引数リスト] という形に変換

よく使う例)
カレントディレクトリ以下の全てのファイルに対してgrep実行

$ find . -type f | xargs grep <キーワード>

 

basenameコマンド

パス名からパスの部分を取り除いてファイル名だけを取り出す
 $ basename <パス名>

 

 

Linuxコマンドまとめ③

Linuxの知識の整理 3回目。今回はbashの設定、パーミッション、プロセス管理、テキスト処理などについてです。
コマンドだけでなく、Linuxそのものに関するものも含まれていますが、早速まとめていきたいと思います。

bash

bashの設定は~/.bashrcというファイルに記載する
bashの起動時にこのファイルが読み込まれる
※変更する際はバックアップを取っておくことを推奨

環境変数

環境変数の表示      printenv
環境変数の設定      export <変数名> = <値>

ファイル、ディレクトリのパーミッション

ls -l を実行すると以下のように表示される

ãls -l linuxãã®ç»åæ¤ç´¢çµæ

一番左の以下のような記述がファイル、ディレクトリのパーミッションを表す。

f:id:masashi_k:20190615231918p:plain
f:id:masashi_k:20190615231515p:plain

ファイルモード変更      chmod <数値> <ファイル名>
 ※数値は与えたい権限に沿って以下のように算出する

f:id:masashi_k:20190615232057p:plain

プロセス・ジョブ

プロセスの表示

ターミナルで実行しているプロセスだけ表示             ps
ユーザーが実行中の全てのプロセスを表示                 ps xf
システムで動作しているすべてのプロセスを表示      ps ax

ジョブの切り替え・終了

コマンドの一時停止                                   Ctrl + z    ※Vim等のアプリケーション実行中
ジョブ一覧の表示                                       jobs -l
ジョブの切り替え(フォアグラウンドへ)    fg %<ジョブ番号>
ジョブの切り替え(バックグラウンドへ)    bg %<ジョブ番号>
 ※初めからバックグラウンドで処理させる場合、コマンドの後ろに&を追加
ジョブの終了(フォアグラウンドの処理)    Ctrl + c
ジョブの終了(バックグラウンドの処理)    kill %<ジョブ番号>
プロセスの終了                                          kill <プロセスID>

リダイレクト・パイプライン

入力をFILEにする                                           < FILE
出力をFILEに書き出す                                    > FILE
出力をFILEに追記                                           >> FILE
エラー出力をFILEに書き出す                         2> FILE
エラー出力をFILEに追記                                2>> FILE
出力、エラー出力を共にFILEに書き出す       > FILE 2>&1
コマンド1の出力をコマンド2で処理              <command1> | <command2>

テキスト処理

sortコマンド

ファイル内のデータを並び替える  ※フィルタとして使用した場合は出力結果を並び替え
  sort [オプション] [ファイル名]

  sort -n    数値順にソート
  sort -r     逆順にソート
  sort -k    キー指定(何個目の要素について並び替えるかを指定)
  sort -u    重複を省いてソート

diffコマンド

ファイル同士の差分を表示する
  diff [オプション] [比較元ファイル] [比較先ファイル]

表示方法
  <範囲1> a <範囲2>      範囲1の後に範囲2の内容を追加
  <範囲1> c <範囲2>      範囲1の内容を範囲2の内容に変更
  <範囲1> d <範囲2>      範囲1を削除

  diff -s       ファイルが違うかのみチェック

grepコマンド

ファイルから検索パターンに合う行を抽出
  grep [オプション] [検索パターン] [ファイル名]
 
※and条件はパイプラインで後ろにつなぐ
   検索パターンには正規表現を使用可能
   参考サイト:
https://www.gadgety.net/shin/tips/unix/regexp.html

  grep -i         大文字、小文字を区別しない     
  grep -v        一致しないものを検索
  grep -n        結果に行番号付与
  grep -l         結果にファイル名のみ表示
  grep -r         ディレクトリ内も検索範囲に入れる
  grep -E        拡張正規表現を使用

  

 

Linuxコマンドまとめ② - Vimの操作

Linuxの知識の整理。2回目はテキストエディタVimです。

昔はファイルを開いたっきり閉じられないということになっていました(笑)
備忘録のため、使いそうな操作方法をまとめておきます。

 

起動・終了

ファイルをvimで開く   vi <ファイル名>
エディタの終了               :q
上書き保存                      :w
名前を付けて保存           :w <ファイル名>
保存せずに終了               :q!
保存して終了                  :wq

 

文字の入力・削除

カーソルの右に文字入力        a
カーソルの左に文字入力        i
文字の削除                              x

※上記はEscを押してノーマルモードにした状態
 a, iを押した挿入モード状態であれば、Back spaceで文字の削除ができる

 

カーソル移動

左 ←                                     h
下 ↓                                       j
上 ↑                                       k
右 →                                     l  (エル)
前方に単語一つ分移動        w
後方に単語一つ分移動        b
行頭                                     0
行末                                     $
行を指定して移動               <行番号> + Shift + g
最初の行                             gg
最終行                                 Shift + g

 

コピー・ペースト

カット(Delete)                  d + (カーソル移動コマンド)
ペースト(Put)                   p 
コピー(Yank)                    y + (カーソル移動コマンド)
行全体のカット                dd
行全体のコピー                yy

 

編集

元に戻す(undo)                u
やり直し(redo)                Ctrl + r

 

検索・置換

下へ検索                             / + <キーワード>
上へ検索                             ? + <キーワード>
次の検索結果へ移動           n
前の検索結果へ移動           Shift + n
置換                                    %s/<置換前文字列>/<置換後文字列>/g

Caffeの環境構築(Windows)

仕事でCaffeを使うことになり、環境構築をやってみたのですが、非常に苦労したため、次に同じことにならないように手順を残しておきます。

Windows上への構築をやろうとしたのですが、Caffe windowsブランチのリンクが切れているようだし、Visual studio2015も有料になっているようなのでLinuxの仮想環境上にインストールしました。

動作環境

OS:Windows10
Virtual box:6.0.6 - Ubuntu 16.04
 ⇒ ここにCPU版のCaffeをインストールする

インストール手順

・Virtual boxをダウンロードしてUbuntuを導入

①以下からVirtual boxをダウンロードしてインストール
https://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp

②以下のサイトを参考にUbuntu16.04をインストールhttps://qiita.com/pyon_kiti_jp/items/0be8ac17439abf418e48

Ubuntu16.04の仮想ディスクは以下からダウンロード
http://releases.ubuntu.com/16.04/

Ubuntuのストレージ容量は40GB以上必要

 

ここからUbuntu16.04上での操作 
-----------------------------------------------------------------------------------------

・pyenv+Anacondaをインストールし、環境を新規に作成

①システムのアップデート

$ sudo apt-get update && sudo apt-get upgrade

 
②pyenvをインストール

$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev libpng-dev
$ sudo apt-get install git
$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv
$ git clone https://github.com/yyuu/pyenv-pip-rehash.git ~/.pyenv/plugins/pyenv-pip-rehash
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc


③anacondaをインストール

$ pyenv install anaconda3-5.2.0
$ pyenv global anaconda3-5.2.0
$ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-5.2.0/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc

※anacondaのバージョンは新しすぎるとcaffeのmakeがうまくいかなかったので、
バージョンを指定する 


④anaconda環境を新規に構築

$ conda create -n py36 python=3.6
$ source activate base
$ conda remove curl
$ conda remove libcurl
$ conda deactivate
$ source activate py36

 

Opencvのインストール

Opencv-3.4.1/Opencv_contrib-3.4.1をダウンロード

$ mkdir ~/opencv
$ cd ~/opencv
$ wget -O opencv-3.4.1.tar.gz https://github.com/opencv/opencv/archive/3.4.1.tar.gz $ tar zxvf opencv-3.4.1.tar.gz $ rm opencv-3.4.1.tar.gz $ wget -O opencv_contrib-3.4.1.tar.gz https://github.com/opencv/opencv_contrib/archive/3.4.1.tar.gz $ tar zxvf opencv_contrib-3.4.1.tar.gz $ rm opencv_contrib-3.4.1.tar.gz

※opencv_contribは不要かもしれないが、念のためインストールした


②必要なライブラリをインストール

$ sudo apt install -y python python-pip python3-pip python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose python-tk python-yaml
$ sudo apt install -y build-essential cmake git pkg-config libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler libatlas-base-dev libgflags-dev libgoogle-glog-dev liblmdb-dev libhdf5-dev wget emacs vim gedit sudo
$ sudo apt install -y --no-install-recommends libboost-all-dev


Opencv-3.4.1のmake/install

$ cd opencv-3.4.1
$ mkdir build
$ cd build
$ cmake .. -DWITH_GTK=NO -DWITH_CUDA=ON -DWITH_CUBLAS=1
$ make -B -j12 all
$ sudo make install

※かなり時間がかかるので気長に待つ 


④.bashrcにPATH追加

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

 

・Caffeのmake/install

GithubからCaffeをダウンロード

$ git clone https://github.com/BVLC/caffe.gitb


②必要なライブラリのインストール

$ pip install —-upgrade pip
$ pip install opencv-python scikit-image protobuf easydict cython


③caffeディレクトリの中のMakefile.config.exampleをコピーしてMakefile.configと
リネームする(変更点は以下の通り)

# CPU-only switch (uncomment to build without GPU support).
# 有効にする CPU_ONLY := 1 # Uncomment if you're using OpenCV 3
# 有効にする OPENCV_VERSION := 3
# コメントアウト #PYTHON_INCLUDE := /usr/include/python2.7 \ # /usr/lib/python2.7/dist-packages/numpy/core/include
# ANACONDA_HOMEを有効にする ANACONDA_HOME := $(HOME)/.pyenv/versions/anaconda3-5.2.0 # PYTHON_INCLUDE := $(ANACONDA_HOME)/include \ # $(ANACONDA_HOME)/include/python2.7 \ # $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include # Uncomment to use Python 3 (default is Python 2)
# 以下のように修正 PYTHON_LIBRARIES := boost_python-py35 python3.5m PYTHON_INCLUDE := $(ANACONDA_HOME)/include \ $(ANACONDA_HOME)/lib \ $(ANACONDA_HOME)/include/python3.6m \ $(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include # We need to be able to find libpythonX.X.so or .dylib.
# ANACONDAのライブラリを使用する #PYTHON_LIB := /usr/lib PYTHON_LIB := $(ANACONDA_HOME)/lib # Uncomment to support layers written in Python (will link against Python libs) # 有効にする
WITH_PYTHON_LAYER := 1 # Whatever else you find you need goes here.
# 以下のように修正 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial

 

④.bashrcにPATHを追加

$ export LD_LIBRARY_PATH="~/.pyenv/versions/anaconda3-5.2.0/lib:$LD_LIBRARY_PATH"

 

⑤caffeをmake

$ make all -j8 # C++版
$ make pycaffe # python版

 

⑥.bashrcにPATHを追加

$ export PYTHONPATH=~/caffe/python:$PYTHONPATH

※これでpython上でcaffeをimportできるようになる

Python 3.6.6 |Anaconda, Inc.| (default, Oct 9 2018, 12:34:16) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
>>>

 

⑦Caffeのインストール

$ sudo make DISTRIBUTE_DIR=/usr/local/caffe distribute
$ cd /usr/local/caffe/bin
$ for fn in *.bin; do sudo ln -s ${fn} `basename ${fn} .bin` ; done
$ cd 「git clone した caffe ディレクトリ」
$ sudo cp -r data docs docker examples matlab models scripts src tools /usr/local/caffe

 

⑧.bashrcに以下のPATHを追加

export CAFFE_HOME=/usr/local/caffe
export PATH=${CAFFE_HOME}/bin:${PATH}
export LD_LIBRARY_PATH=${CAFFE_HOME}/lib:${LD_LIBRARY_PATH}
export PYTHONPATH=/home/cpbd/caffe/python:${CAFFE_HOME}/python:$PYTHONPATH

※これでcaffeのコマンドが使えるようになる

$ caffe --version
caffe version 1.0.0

 

補足

環境によって同じ手順でもcaffeのmake時に異なるエラーが発生したり、pythonの環境によってcaffeをimportするときにエラーが発生することがある。
その場合はググって対応策を調べながら試行錯誤する必要あり。

また、GPUを使う場合はMakefile.configの設定が異なるので修正してmakeする。

 

参考サイト

https://qiita.com/yoyoyo_/items/ed723a6e81c1f4046241

http://yusuke-ujitoko.hatenablog.com/entry/2016/06/19/203443

http://takatakamanbou.hatenablog.com/entry/2016/02/29/224000

 

 

Linuxコマンドまとめ①

仕事でLinuxを扱うことが増えました。

毎回コマンドが分からず、調べながら仕事をしているので、自分が覚えていないコマンドを中心に使いそうなまとめておくことにします。

基本操作

起動・終了

シャットダウン shutdown -h now
再起動                  shutdown -r now

カーソル移動・操作

後方一文字移動       Ctrl + b
前方一文字移動       Ctrl + f
行頭に移動              Ctrl + a
行末に移動              Ctrl + e
画面消去                  Ctrl + l
強制終了                  Ctrl + c
行頭まで削除           Ctrl + u
最後の入力を復元    Ctrl + y

言語変更

日本語化    LANG=ja.JP.UTF-8
英語化        LANG=C

 

lsコマンド

 現在いるディレクトリのファイルやフォルダを一覧表示
    ls [オプション] [ファイル、ディレクトリ名]

    ls -a     隠しファイルも含めて表示
    ls -l      ファイルの詳細まで表示(パーミッションやタイムスタンプなど)

※複数のオプションを同時に適応したい場合、以下の2つの記載のいずれでもOK
    ls -a -l
    ls -al

mkdirコマンド

 ディレクトリを作成
    mkdir [オプション] <作成するディレクトリ名>

    mkdir -p    深いディレクトリを作る際、途中のディレクトリがなくても一気に作成

touchコマンド

中身が空のファイルを作成
    touch <新しいファイル名1> <新しいファイル名2> ...

rmコマンド

ファイル・ディレクトリを削除
    rm [オプション] <削除するファイル名1> <削除するファイル名2> ...
※オプションなしの場合、ディレクトリは削除できない

    rm -r    再帰的にディレクトリツリーを削除(ディレクトリ削除の場合はコレ)
    rm -i    削除前に確認画面を出す

catコマンド

ファイルの表示
    cat [オプション] <ファイル名>

    cat -n    行番号を表示

cpコマンド

ファイル・ディレクトリをコピー
    cp [オプション] <コピー元> ... <コピー先(ディレクトリ/ファイル名)>
※コピー元は複数指定可能

    cp -i    上書きを確認
    cp -r    ディレクトリをコピー(オプションなしでコピーしようとするとエラー)

mvコマンド

ファイルの移動・名前の変更(リネーム)
    mv [オプション] <移動元> ... <移動先>
※移動元/移動先共にファイル名の場合、名前の変更となる
 cpコマンドとは異なり、オプションなしでディレクトリの移動が可能

    mv -i    上書きを確認

lnコマンド

リンクを張る
    ln [オプション] <リンク元ファイル名> <リンク名>

    ln オプションなし    ハードリンク(ファイルに複数の名前を付ける)
    ln -s    シンボリックリンク(パス名が書かれたショートカット、リンク先が実体)

findコマンド

ディレクトリーツリーからファイルを探す
    find <検索開始ディレクトリ> <検索条件> <アクション>

 検索条件

    -name <ファイル名>    ファイル名の大文字小文字を区別する
    -iname <ファイル名>    ファイル名の大文字小文字を区別しない
    ※ファイル名に*や?を使用する場合は' '(シングルクォート)をつける

    -type    ファイルの種類で探す
        -type f    通常ファイル
        -type d    ディレクト
        -type l    シンボリックリンク

    -a    複数条件指定 上記検索条件を-aで区切って並べることでAND検索ができる

アクション

    -print    検索したパス名を表示(省略可)

--helpオプション

コマンドの使い方が不明な時、--helpをオプションとして実行すると
helpメニューが表示される

画像データのフォーマットまとめ(画像認識用)

ディープラーニングの画像認識デモを作っているときに
画像データのフォーマットを合わせるのに苦戦したので、
調べたことをまとめておきます。

OpenCV

OpenCVで扱う画像データはNumpy配列のndarray型
3次元の配列で高さ x 幅 x 色数
色の順番はRGBではなくBGR

import cv2

im = cv2.imread('test.jpg')

print(type(im))
# <class 'numpy.ndarray'>

print(im.shape)  # サイズ(高さ x 幅 x 色数)
# (480, 640, 3)

Pillow(PIL)

3rd partyの画像処理ライブラリ
GitHubで公開されているディープラーニングのコードには
Pillowで画像を読み込むものがある
画像を読み込んだ際の型はPIL型
画像の縦横サイズはsizeメソッドで取得

from PIL import Image

img = Image.open('test.png') # 画像の読み込み

print(type(img))
# <class 'PIL.PngImagePlugin.PngImageFile'>
print(img.size[0]) # 横 # 640
print(img.size[1]) # 縦 # 480

img.save("test2.png") # 画像の保存

Pillow(PIL) ⇔OpenCVへの変換

Pillow(PIL)で読み込んだ画像を Numpy配列のndarray型に格納することで
OpenCVと同様の形式に変換
色の順番はRGBとなり、ここがOpenCVと異なる

from PIL import Image
import numpy as np

im = np.array(Image.open('test.jpg')) # PIL型として画像を読み込み

print(im.dtype) # データ型 # uint8

print(type(im))
# <class 'numpy.ndarray'>

print
(im.shape) # サイズ(高さ x 幅 x 色数)
# (480, 640, 3)


Pillow(PIL)形式に戻す場合はImage.fromarray()を用いる

pil_img = Image.fromarray(im)  # ndarray型をPIL型に変換

 サンプルコード

Webカメラの映像を取得してPIL型に変換し、推論処理を行う

import cv2
from PIL import Image
import numpy as np

vid = cv2.VideoCapture("読み込む動画のパス") # オブジェクト生成
return_value, frame = vid.read()   # 動画のフレームを読み出し

# ndarray型をPILのイメージオブジェクトに変換 これを推論にかける
image = Image.fromarray(frame)


●推論した結果を動画として保存する

import cv2
from PIL import Image
import numpy as np

# オブジェクト生成
out = cv2.VideoWriter("保存する動画のパス", video_FourCC, "動画のfps", "動画の解像度")

# 推論した結果の画像(PIL型)をndarray型に変換 result = np.asarray(image)
out.write(result)      #動画の保存

 

参考サイト

https://note.nkmk.me/python-opencv-imread-imwrite/

https://qiita.com/derodero24/items/f22c22b22451609908ee

【読書記録】ー 人生の勝算

以前「メモの魔力」の読書記録をこのブログにも書きました。最近でもTVに出演され、それを受けてTwitterやブログで話題になっています。Webマーケティングのやり方は非常に勉強になっています。
https://masaeng.hatenablog.com/entry/2019/02/17/000229

今回は「メモの魔力」の著者であるSHOWROOM社長 前田さんがメモの魔力の前に書かれた「人生の勝算」を読んでみましたので、学んだ内容を記録していきます。

人生の勝算 (NewsPicks Book)

人生の勝算 (NewsPicks Book)

 

 

人生全般について

●人生のコンパスを持とう
  自分の原体験に起因する人生をかけてやりたいこと=人生のコンパス
  日頃何をすべきなのか、すべての考え方基準となる
   ⇒ メモを通した徹底した自己分析、言語化が必要
     これをやらないと明確に人に話せるようにならない

   f:id:masashi_k:20190419104303p:plain

SNSなど自分を世の中に売り込むポイント
  ストーリー創出・差別化を工夫すること
  好きなことで売り込むのは前提だが、その中でブルーオーシャンを探す
    例:朝5時半の女 AKB48チーム8 大西桃香さん

●やる気はすべてを超越する
  ポイントは「見極めて」やりきること
  見極める:可能性が高いところを絞る
    ⇒ここにまず注力、絞ったらあとは成果がでるまでひたすらやるのみ

●普通にまじめにやるだけで人より上に行ける
  みんなそれほど勉強していない、手を抜いてしまう

ビジネスについて

●現象に対してなぜうまくいかないのかを考え、手を打つ
  このPDCAを速く回す
    ⇒とにかく数を試してうまくいく方法を見つける
     成功しているのはたくさん失敗して数をこなすから
     (前田さんは圧倒的に策をこなしていると実感できる)
  ※開発の現場では結果が目に見えるまで
   時間がかかることが多いので、スピード感がない
   こまめにチェックして方法を素早く変えていかないといけない

●他者の目を持つ
  自分がお客さんだったらという視点でお客様が何を求めているかを考える
  思いやり = 他者視点 

●アイデアそれ自体に価値はない
  同じ起業アイデアは100人は持っていると思うこと
  それをいかに実行するか、形にするかが重要(やらない人が圧倒的多数)

●ビジョンを徹底して深める
  人生のコンパスと同じく、新規事業でも目指す方向性、ビジョンを
  決してブレないレベルまで深めて、関係者の間で合意を取っておくことが重要
    ⇒上の人の意見で方向性は容易にブレてしまう

マーケティングについて

ビジネスにおけるコミュニティの重要性

強いコミュニティを作ることはこれからのビジネスにおいて非常に重要
商品の周りにコミュニティができるとその商品は強い

f:id:masashi_k:20190419110602p:plain
・コミュニティは後天的な努力(魅力の発信など)で強いものを作れる
・余白があるとメンバーが埋めたくなる
 その隙を残す(オーナーは完璧でなくてもよい)

●客がお金を払う理由
  感情が動く、ストーリー性がある
  モノではなくコト消費(自分の物語に対して消費)

●現代人が欲しているもの
  デジタルだが、現実世界に近いアナログ感
  温かみ、人と人とのつながり
  

感想

何より前田社長が常人では到底できないような圧倒的な努力を積み重ねて
今の位置を築き上げられているということがわかります。
そしてその原動力となっているのが自分の原体験です。
誰しも生まれ育った環境から自分の価値観に大きく根付いているものが
あると思いますが、ぼんやりとした状態で普段生きていると思います。
それを言語化し、人生のコンパスとすることでその想いが強くなり、
生活の中で常に意識することで夢へ近づいていく。
人生の勝算とはそのようなメカニズム何だろうと思いました。

私も前田社長ほどはできませんが、少しでも近づけるように
人生のコンパスをもっと明確化し、努力を積み重ねていきたいです。