CentOS7でソフトウェアをソースからインストールする(OpenSSLとOpenSSHでの説明)

はじめに

こちらの記事でインストールしたCentOS7でSSHの鍵を生成しようとしたところ、「error in libcrypto」というエラーが。
エラー自体は鍵の生成を一括でなく個別にすることで解消しました。(ssh-keygenを一括生成の-Aオプションでなく、-tオプションで個別に鍵生成する)

しかし、何となく気持ちよくないので原因を調査してみました。ただ力及ばず原因は分からず。とりあえずバージョンアップして解消しないかみてみるついでにソースからインストールする手法を学ぼうかと。

結論から言うと結局別のエラーが出てそちらが解消できなかったのですが、ソースからインストールする勉強にはなったので手順とかつまづいたところとか残します。

手順

必要なパッケージのインストール

今回使うyumパッケージをまとめてインストールします。
インストールされていないものがあるとどこかでエラーが発生するはずです。

$sudo yum install -y wget gcc make perl zlib-devel pam-devel

それぞれ以下のようなソフトです。

ソフト名 役割
wget ネットワークからデータをダウンロードするソフトウェアです。
ソースのダウンロードにつかいます。
gcc GNU Compiler Colletionの略。GNUによる様々な言語のコンパイラ群です。
そのうちC言語のコンパイラを指したGNU C Compilerの意味で使われたりもします。
今回はOpenSSLとOpenSSHのコンパイルに使用します。
make gccと合わせて使います。Makefileという定義ファイルを使ってコンパイルを楽にするためのソフトウェアです。
perl Perl言語のパッケージです。今回はOpenSSLのMakefile作成に使います。
zlib-devel zipやgzipの圧縮ができるライブラリです。
今回はそのヘッダファイルをOpenSSLのコンパイル時に使用します。
「devel」はdevelopの意味で開発用にヘッダファイルなどをダウンロードする用のパッケージです。
pam-devel PAM認証用のヘッダファイルです。
今回はOpenSSHのコンパイル時に使用します。

 

OpenSSLのインストール

ソースのダウンロード

以下コマンドでダウンロードします。バージョンは自分のダウンロードしたいものに変えてください。
URLは下記がダメになっていたら公式などから探してください。

#作業ディレクトリへ移動
$cd /usr/local/src

#ダウンロード
$wget http://www.openssl.org/source/openssl-1.1.1c.tar.gz
#httpが使えない場合は同じドメインでwwwサーバをftpサーバにして、FTPでダウンロードすればいけるはず
$wget ftp://ftp.openssl.org/source/openssl-1.1.1c.tar.gz

tar.gzファイルはgzipファイルの圧縮ファイルです。解凍しましょう。

$tar xvfz openssl-1.1.1c.tar.gz

オプションの意味は次の通り。

オプション 意味
x 圧縮ファイルからのファイルの取り出し
v 結果を出力する
f 圧縮ファイルのファイル名を指定
z 圧縮ファイルがgzip形式であることの指定

Makefileの設定

解凍したソースのフォルダ内にはconfigという設定ツールが入っています。
このツールを使って、OpenSSLをコンパイルするためのMakefileを作成します。
–prefix=〜のパスは、OpenSSLをインストールする先に合わせてください。
例えば他にも/usr/local/binにインストールしたりがあるかと思います。

#解凍したフォルダへ移動
$cd openssl-1.1.1c

#configコマンドを実行
$./config --pref=/opt/openssl shared zlib

コマンドが成功すると設定が終わりMakefileが作成されます。

 

インストール

作成されたMakefileの処理をmakeコマンドで実行します。
その後make installでインストールします。

これらのコマンドは時間がかかります。(私の環境では合計1時間くらいかかったような記憶です)

#Makefileでのコンパイル
$make

#インストール時は管理者権限が必要
$sudo make install

これでインストールはできましたが、元々古いバージョンのOpenSSLを使用していた場合は、新しい OpenSSLを他のソフトウェアから参照して利用するためにもう少し設定が必要です。
使用していない人は1つ飛ばして確認へ。

シンボリックリンクの作成

他のソフトなどがOpenSSLを参照した際に、新しいOpenSSLが参照されるように、シンボリックリンクを作成します。
また、OpenSSLのバージョン次第で依存するライブラリのバージョンが変わるため、正しいバージョンのライブラリを参照できるようにします。

#元のOpenSSLが入っているディレクトリに移動
$cd /usr/bin

#元のOpenSSLを退避
$sudo mv openssl openssl.bak

#新しいOpenSSLのシンボリックリンクを作成
$sudo ln -s /opt/openssl/bin/openssl openssl

#新しいOpenSSLが参照するライブラリファイルを設定
$sudo vi /etc/ld.so.conf

/opt/openssl/ssl/lib  #追記
include ld.so.conf.d/*.conf #元からある

#ld.so.confの設定を反映させる
$sudo ldconfig

確認

これでOpenSSLのインストールは完了です。
バージョンが新しくなっているか確認します。

$cd #一応ホームディレクトリで確認

$openssl version
OpenSSL 1.1.1c 28 May 2019 #インストールしたバージョンが出ればOK

OpenSSHのインストール

インストールまでの流れはOpenSSLとほぼ同じです。(config、ではなくconfigureコマンドのオプションが違うくらい)
細かい説明は省いて進めます。復習がてら追っていくと良いと思います。
configureのオプションも全ては理解しきれていないので、ニュアンスだとモヤモヤする場合は別途ググってください。

$cd /usr/local/source

#ソースをダウンロード
$wget http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-8.0p1.tar.gz
#ftpの場合もサーバは一緒
$wget ftp://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-8.0p1.tar.gz

#解凍
$tar xvfz openssh-8.0p1.tar.gz

#Makefile作成 (OpenSSLに比べオプションが多彩なので、気になる場合は別途検索してください)
$cd openssh-8.0p1
$./configure ¥ #¥はコマンド中の改行 ¥の前にスペース一つ開けておくとオプションが綺麗に見える
--with-tcp-wrappers ¥ #このオプションは新しいバージョンでは意味がないかも。筆者環境では無視された。
--with-ssl-dir=/opt/openssl/ ¥ #OpenSSLのインストール先を指定
--with-pam ¥
--with-md5-passwords ¥
--bindir=/usr/bin ¥
--sbindir=/usr/sbin ¥
--libexecdir=/usr/libexec ¥
--sysconfdir=/etc/ssh

#ここは特に時間がかかる
#コンパイル
$make

#インストール
$sudo make install

#バージョン確認
$ssh -V #Vは大文字
OpenSSH_8.0p1, OpenSSL 1.1.1c 28 May 2019

最後にバージョンが確認できていますが、これだけではまだちゃんと動作していない場合があります。
以下のコマンドを実行して、起動時にタイムアウトしないか確認してください。

$sudo systemctl restart sshd

タイムアウトしなければ問題ありませんが、タイムアウトする場合はsystemd関連の設定が必要になります。

SSHデーモンの起動設定

#ファイルのバックアップ
#同じディレクトリ内でコピーして編集しても良い
$sudo cp /usr/lib/systemd/system/sshd.service /etc/systemd/system

#編集
$sudo vi /etc/systemd/system/sshd.service

(略)
[Service]
#Type=notify #コメントアウトする
Type=simple #デフォルト値なのでなくても良いはずですが一応

#設定ファイルの再読み込み
$sudo systemctl daemon-reload

#sshdの再起動
#sudo systemctl restart sshd

Type=〜のオプションは難しいのでこちらの記事や検索して調べていただけますと。
どうやらsshdからsystemdへ起動通知がいっていなかったのが正常化されることによってタイムアウトが直るみたいです。

ssh鍵の権限について

この手順はSSH鍵の権限が600より緩いと発生すると思われます。
再起動後、サービスの状況を確認しましょう。

$sudo systemctl status -l sshd

もし「Permissions 06xx for ‘/etc/ssh/ssh_host_xxxxxxx’」のようなエラーが出ていた場合は、SSH鍵にアクセスできる権限が広すぎます。この状態だとSSHが起動できないようなので、権限を制限しましょう。

$sudo chmod 600 ssh_host_* #*でワイルドカード指定ができる

#もう一度再起動
$sudo systemctl restart sshd

筆者の場合はここまでやってsshdが起動できるようになりました。

終わりに

これでソースからのソフトウェアのインストールができるようになりました。

ちなみに当初のssh-keygenの「error in libcrypto」エラーは解消しましたが、代わりに「invalid format」エラーが発生し解決できず。個別に鍵を生成することで回避しました。

ただソースからのインストールの一連の流れで学べたことは多いので、エラー関係なくやってよかったかなと思います。

Tera Termでエラーが発生した場合の対処法 :「SSHパケットを送信中にエラーが発生しました. 切断します. (WSAAsyncSelect:10093)」

はじめに

KVMでCentOS7にCentOS7の仮想環境を立ててみるで建てたCentOS環境にTera TermからSSHで接続したところ、画面が真っ黒なまま接続出来ず、Tera Termを閉じるとタイトルのエラーが発生。
原因は分からなかったものの解消方法はわかったのでメモします。

エラー画面

同じ目にあっている人がいたら試してみてください。

対処法

  1. メニューから「設定」>「SSH…」を選択します
  2. 優先する鍵交換アルゴリズムの順(E) (SSH2のみ)の欄で「ecdh-sha2-nistp256」が「ecdh-sha2-nistp384」より上にあれば、「ecdh-sha2-nistp256」の方を下に持ってくる。
    というか、「ecdh-sha2-nistp521」→「ecdh-sha2-nistp384」→「ecdh-sha2-nistp256」の順にするとより良い。(セキュリティ的な意味で)
  3. メニューから「設定」>「設定の保存(S)…」を忘れずに。
  4. Tera Termを再起動してSSH接続し直す。

以上でエラーが解消しSSH接続できるようになったと思います。

おわりに

原因はわかってないですがとりあえず解消はできました。Tera Termのバグなのか仮想環境側のバグなのかも不明です。物理のCentOSには接続出来ているので仮想環境の問題の匂いもしますが断定はできない。
今はこれ以上調べる余力も技術もないので、一旦上記でしのぎます。

KVM上の仮想環境に立てたからかSSH関連で色々とトラブルにあいました。おかげさまでLinuxの仕組みを少しだけ知ることができたので、いつでも見返せるよう少しずつ記事にしていきたいなと思います。

KVMでCentOS7にCentOS7の仮想環境を立ててみる

はじめに

自由に使えるLinux環境が欲しいなと思いまして。

物理環境は色々やりすぎて壊れると面倒ですし、仮想環境を立てることにしました。

最近は仮想化といえばコンテナ仮想化(特にdocker)の話題が多いですが、端末丸ごと使い潰したい場合や、一から何度も構築の練習をしたい場合は従来からのハイバーバイザ仮想化の方が良いと踏んで始めてみようと思います。

KVMとは

Kernel-based Virtual Machine

Linuxで使われるハイパーバイザ型の仮想化基盤です。

CentOS7などではデフォルトで有効となっています。

今回の環境

ホストOS:CentOS Linux release 7.5.1804(Core)

CPU:Intel Celeron (コア数2) 詳細は忘れてしまった。コア数2以上ないと動かなかったような気も

ゲストOS:CentOS Linux release 7.6.180 (Core)

作成方法

必要なソフトウェア(パッケージ)のインストール

バージョンとかにこだわる必要がある人はソースからインストールする方法をググりましょう。

そうでない人は以下のコマンドを実行します。

$ sudo yum install -y qemu-kvm libvirt libvirt-client virt-install virt-manager bridge-utils

私も調べながらなので全て何に使うのか理解したわけじゃないですが

一応何に使うのか一覧を

  • qemu-kvm:KVMにおいて仮想マシンのハードウェアをエミュレートするもの
  • libvirt:仮想化管理用のAPI群
  • libvirt-client:仮想端末に接続するためのクライアント
  • virt-install:仮想端末をインストールするためのソフトウェア
  • virt-manager:仮想端末をGUIで管理するためのソフトウェア。Hyper-Vマネージャーのような存在。試していないがホスト側にGUI環境が存在していないなら不要だと思われる

ネットワーク周りの設定

調べてみると、仮想OSをインストールする前にまずはネットワークの設定が必要らしいです。

多分後からでもできるのですが手戻りが嫌なので先に設定します

ホストOSとゲストOSで通信するためと、ゲストOSがほすとOSのネットワークインターフェースを使用してインターネットに接続するためです。

やること

仮想ブリッジを作成してホストマシンの設定を移し替えます。

ホストマシンは作成した仮想ブリッジにNICを接続して通信をできるようにします。

仮想マシンは作成時にNICを仮想ブリッジに紐づけることになります。(ここは仮想マシンインストール時にやります)

仮想ブリッジの作成

以下のコマンドを実行します。

$ nmcli con add type bridge ifname br0

br0という名前(ifname)の仮想ブリッジを作成します。

以下のコマンドで作成できたかを確認します。

$ nmcli dev

DEVICE列がbr0、TYPE列がbridgeとなっているデバイスがあればOKです。

CONNECTION列は上記コマンドでは指定していないのでデフォルト値になります。おそらくbridge-br0となっていると思います。

仮想ブリッジにホストマシンのネットワーク設定を移し替え

以下のコマンドを、IPアドレスなどを自身のホスト環境のものに当てはめて実行します。

br0ではなく接続名(bridge-br0)を指定することに注意です

$ nmcli con mod bridge-br0 ipv4.method manual ipv4.address "192.168.0.10/24" ipv4.gateway "192.168.0.1" ipv4.dns "192.168.0.1"

書くまでもないレベルですが、

  • IPv4手動設定
  • IPアドレス設定
  • デフォルトゲートウェイ設定
  • DNSサーバ設定

を設定してます。コマンドの意味を考えながら学習すると、後から別のところで出てきたときに出てきやすくなりますね。

ホストマシンのNICを接続

この手順では一度ネットワークが切断されるので注意です。手順ミスをした時に元のIP設定が使えなくても接続できる方法(例えば物理的にディスプレイとキーボードを使う)があった方が安心です。

仮想ブリッジにNICを紐づける設定を追加します。

$ #仮想ブリッジにホストのNICを紐づける設定を追加
$ nmcli con add type bridge-slave ifname enp3s0 master bridge-br0
$ #次の手順でパスワードを求められて再起動がかからない状態で切断されないようにするために権限昇格
$ su
# #ホストの従来の設定を削除
# nmcli con del [元の設定の接続名] && reboot

再起動されるので、時間をおいて再度ホストに接続してください。

設定確認

$ nmcli dev
$ #DEVEICE: enp3s0 - TYPE: ehernet - CONNECTION: bridge-slave-enp3s0 のデバイスがあればOK 
$ brctl show
$ #bridge name: br0 - interface: enp3s0 のブリッジがあればOK
$ ip a
$ #br0に元のホストのIPなどが設定されていればOK

以上でネットワークの設定完了です。

仮想マシンのインストール

ようやくゲストOSのインストールです。

ゲストOSのisoを取得

cURLで取得します。

ダウンロード元のURLはインストールするOSに応じて自分で探すしかないですが、筆者がインストールしたCentOSの場合ここから適当ものを選びました。(ページが更新されている可能性はありますが)

例だと奈良のサーバです。

$ #iso保存用のディレクトリを作成(今回は/iso)
$ cd /
$ mkdir iso
$ curl -LO http://ftp.nara.wide.ad.jp/pub/Linux/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso

ゲストOSのインストール

調べると仮想ディスクの作成をしている手順もあるのですが、なくても仮想マシンの作成はできるよう。

コマンド実行

以下のコマンド実行時に自動で作成されている?(.qcow形式のファイルができるがこれがそうな気がする)

ちょっと理解しきれていないですが、今回は試すこと優先で進めたのでそのままインストールへ進みます。

$ sudo virt-install --name=testvm \
--memory=1024 \
--disk size=20 \
--vcpus=1 \
--location='/iso/CentOS-7-x86_64-DVD-1810.iso' \
--network bridge=br0 \
--graphics=none \
--extra-args='console=tty0 console=ttyS0, 115200n8'

オプションは適宜変更してもらえればと思います。

オプション 内容
name 作成する仮想マシンの名前
memory 仮想マシンのメモリ量
disk size 仮想マシンのディスクサイズ(GB単位)
cpus 仮想マシンの仮想CPU数
location インストールするゲストOSのisoファイルのパス
network ホストのどのブリッジを使用するかの設定
graphics GUIを使用するか
(使用する場合はどのように設定するかは調べてません。kdeとかを指定するのかも)
extra-args ホストマシンからゲストマシンへ接続するための設定
入出力デバイスとホストのコンソールを紐づけている?
最後の115200n8はない場合も見かけたが、ないと接続できなくなるような記述っぽいものもあったのでつけておくと無難。ボーレート、パリティ、データビット数の設定らしい。

コマンドを実行すると、色々と画面が流れて、CentOS7のインストーラanacondaが起動します。(最初Pythonのanacondaかと思って???となりました)

インストール

画面に従って設定していきます。

注意点は2点です。

  1. 設定中にqで抜けない
  2. 削除操作はdeleteキーで(back spaceではない)

特に1は、押してしまうとインストールが中断されます。動かない仮想マシンが出来上がります。

対処法は調べればあると思いますが、面倒だったので私は仮想マシンを一度削除して作り直しました。

設定を確定して先に進むときはc キーを押すようになっています。

設定が終わったらbキーでインストールを開始します。(全て設定する必要はないですが、全てやっておいた方が後で楽だと思います。)

自動で画面が進みますが、この画面で長期間止まります。筆者の場合は1時間くらい放置して別のことしていたら先に進んでました。調べてみるとBUGのような記述もあったのですが確信はできず

この画面になったらインストール完了です。Enterを押すと仮想マシンへログインできます。(インストーラでパスワードを設定していたらパスワードを求められる)

仮想マシンへの接続と切断

上記手順を実施した直後だと接続している状態ですが、ここは順序立てて説明します。

仮想マシン一覧の確認

以下のコマンドで。管理者権限でインストールした場合は確認時も管理者権限が必要です。(一般ユーザー権限でインストールできるかは未確認)

—all オプションをつけない場合は、起動中の仮想マシンのみを表示します。慣れておくと混乱しません。

$ sudo virsh list --all

接続

IDか名前で仮想マシンを指定して接続します。

$ sudo virsh console testvm

切断

接続時に書いてありますが、^ + ] で切断します。

WindowならCtrl + ]です。

おわりに

以上で、KVMでCentOS7の仮想マシンを使えるようになりました。

OSが起動しなくなるまで弄り倒してあげましょう。(ホストに影響のない範囲で。また、何らかの形でホスト含むOSが起動しなくなっても筆者は責任を取れません。)

楽しいLinuxライフを!

 

Markdown(マークダウン)を活用しよう!ブログ記事作成が楽になるかも!?

はじめに

どうも、キーです。
今回はMarkdown(マークダウン)を扱っていきたいと思います。
Markdown…
タイトルではブログの記事作成が楽になると書きましたが、実際には文書作成においていろいろな場面で出てきます。
例えば、エンジニアの知識共有サービスであるQiitaなどもMarkdown形式で記事を書きます。
この記事でMarkdownの存在を知った人に、活用を始めてもらえると嬉しいです。

目的

この記事の目的は以下2点です。

  • Markdownを知らない人に、Markdownの概要を伝えること
  • 私のブログ作成を少し楽にすること

はい。
この記事のメイン私のブログ作成を楽にすることです。
また、Markdownについても使い方の説明はせず、Markdwnとは何かの説明までをします。
Markdownの使い方については正直都度ググるほうが良いので、この記事には書きません。

Markdownとは

はい。いきなり核心ですがMarkdownについては正確に説明するのが難しいため、wikipediaを引用します。

Markdown(マークダウン)は、文書を記述するための軽量マークアップ言語のひとつである。本来はプレーンテキスト形式で手軽に書いた文書からHTMLを生成するために開発されたものである。しかし、現在ではHTMLのほかパワーポイント形式やLATEX形式のファイルへ変換するソフトウェア(コンバータ)も開発されている。各コンバータの開発者によって多様な拡張が施されるため、各種の方言が存在する。
引用:Markdown (https://ja.wikipedia.org/wiki/Markdown)

いろいろと書いてありますが、個人的な感覚で要約しますと、こうなります。

  • 文章を簡単に書くための記述方法です
  • もとはHTML文書を作るために開発されました
  • 今ではいろいろな形式の文書へ変換する方法も作られています

記述方法ではなく言語、あるいは変換するためのプログラムという意見もあるかもですが、大事なのはどう捉えるかではなくどう使えるかなので、一旦これで。

使い方

Markdownの定義は分かりましたが、結局どういったものなのでしょう。
ここでは記法については詳しくやりませんが、最低限例を書きます。
例えば節タイトルとなっている「使い方」は見出しの文字ですが、Markdownを使わずHTMLで記述するとこうなります。

<h1>使い方</h1>

これをMarkdownで記述すると以下のようになります。

# 使い方

元々あまり複雑ではないですが、ものすごく簡単になりましたね。
キータイプ的にも負担が少ないです。
見出しは一つの例ですが、その他にも箇条書きや引用、表など様々なものを簡単に表現して、HTMLで記載したときと同じように表示できます。

注意点

当然ですが、Markdownは万能ではありません。
Markdownは定形的な文章は得意ですが、細かくカスタマイズする場合はHTMLにしてからの変換が必要になります。
また例えば上の例で#を使用したようにHTMLとは違う予約後を使っているため、再現できない文章が出てくる可能性もあります。
よっぽど特殊な状況でない限りは大丈夫だと思いますが、Markdownでうまく書けないといったときには思い出すと良いかもしれません。

Markdown文書作成環境

最近のWebサービスなど、至るところで使用されているMarkdown形式ですがどのような環境が必要でしょうか。
結論としては簡単で、Markdown対応のエディタを使いましょう。
気をつける点として、例えばWordpressの投稿に使いたい場合はHTMLへの変更機能が必要になります。
機能面については自身で使って、気に入ったものを継続利用することをおすすめします。

ちなみに上記のHTMLへ変換する機能を持ったエディタであれば、例えばakatsuki様が作成したWebページで使えるエディタなどがあります。
以下の紹介記事がありましたので、リンクをはらせていただきます。

Markdownで書いてHTMLに変換してブログ投稿する人(俺)に嬉しいMarkdownエディタ作った

実はこの記事の作成時も上記エディタを使用させていただいていたり。。。

おわりに

今回はMarkdown形式についてお話しました。
これによってブログ投稿が少しだけ楽になるといいなと思います。
また、Markdown形式を採用しているWebサービスなどへ投稿するときも楽に投稿できますね。

おまけ

ソースコードをWordpressに投稿する場合は、その部分についてはMarkdown形式はおすすめしないです。
その場合の表示は以下のようになります。

<pre class="prettyprint linenums"><code>
.wrap {
max-width: 1000px;
/* こんな感じ */
} 
</code></pre>

Webサイトにソースコードを載せる方法(1)の記事と同じ表示ですね。正直おしゃれにするにはカスタマイズが必要です。
QiitaなどのWebサービスではサービス側でカスタマイズがしてある(と思う)ので(多分)問題ありませんが。

Webサイトにソースコードを載せる方法4 Gist

はじめに

どうもキーです。
最近は仕事が落ちいているので更新する時間がとれて書く気がおきますね。
GitHubについての記事を経て、ようやくここまで来ました。
Gistでソースコードを表示する方法についてです。
GitHubへの登録などがまだであったり、そもそもGitHubって何?という方は以下の記事を。

Gistの作成手順

1. GitHubにログインする

Sign inからログインしましょう。
Sign upはアカウント作成なので注意です。

2. Gist画面へ移動

右上の+ボタンを押してNew gistを選びましょう。

3. 必要な項目を入力する

タイトル説明ソースコードを入力しましょう。

4. 作成する

Create secret gistCreate public gistを押しましょう。
Gistの表示以外では見せたくない場合はsecret、GitHub内のアクセスも許可する場合はpublicです。

5. 作成完了

これでGistの作成は完了です。
それでは早速ブログで公開しましょう。

ブログに表示する方法

1. スクリプトをコピーする

Gistの画面のスクリプトをコピーします。

2. ブログのテキストに貼る

コピーしたスクリプトをブログに貼ります。
WordPressの場合はテキストモードで貼り付けましょう。

これだけです。

結果

終わりに

Gistはアカウントを作らなければいけませんが、一度準備ができれば次回以降ものすごく簡単にソースコードのハイライド表示ができます。
特にGitHubをよく利用しているプログラマにはおすすめかなと。
私個人としてはデザイン的に好きなgoogle-code-prettifyを今は利用していますが。

次回以降の記事は未定ですが、書いてみたいネタはまだあるのでそこから試してみて書きたいと思います。
自身の成長の記録を残せるのも悪くないですね。
このブログだけでもすこしずつ成長できている気がします。

GitHubへ登録しよう!プログラマの小さくて大きな一歩!

はじめに

お久しぶりです。キーです。
前回の更新から長く空いてしまいましたが、今回はプログラマならぜひ登録したい GitHub への登録をしたいと思います。
といってもものすごく簡単なのですぐ終わります。(GitHubについて、登録の意味などはこちら

登録手順

1. GitHubのページへアクセスする

GitHubの公式

2. 必要項目を入力

多少画面は違うかもしれませんが。

3. 決定

Create an accoutをクリックします。

4. 登録完了

以上です。これだけです。

ついでに

いろいろなサイトを見ると設定を確認しておいた方がよさそうな箇所があったので確認を。

SettingEmailsから以下の箇所を確認します。
チェックがついていれば大丈夫です。ついていなければつけてください。
※設定の意味を理解して自己責任で外される場合は外して大丈夫です。

終わりに

最近のWebサイトは登録が簡単でいいですね。
もともと私がGitHubへ登録した目的はGistでソースコードを表示するためだったので、次回はそれをやると思います。

ソースコードを管理する! GitHubとは? (プログラマの必須要件!?)

どうもキーです。
今回はGitHubについて説明していきます。

なお、本記事はGitHubをある程度知っている、利用したことがある人が読んでも、得られるものは(多分)ないです。

はじまりのまとめ

まずは先にまとめから載せます。
このまとめに行き着くように解説していきます。

  • GitHubとは、「GitHub社が提供している」「Gitバージョン管理システムを利用する」「Webサービスである」。
  • GitHubはGitを使った「ソースコードのバージョン管理をする」ために利用する。
  • 「ソースコードのバージョン管理をする」と、「問題が発生した時の切り戻し」や、「複数人でのソースコード編集によるバッティング回避」に利用できる。
  • GitHubは特に「オープンソースソフトウェアをGitの仕組みを利用して管理する」ということに対して強い。

GitHubとは

Wikipedia

以下、引用です。(引用と分かりづらかったので明記しときます。今後引用のスタイルも編集しようと思いました。)

GitHub(ギットハブ)はソフトウェア開発プロジェクトのための共有ウェブサービスであり、Gitバージョン管理システムを使用する。 Ruby on RailsおよびErlangで記述されており、GitHub社によって保守されている。

引用:GitHub – Wikipedia

さて、そもそもGitHubを知らない人にはこれを読んでもピンと来ない人も多いでしょう。
要点を説明すると以下のようなものです。

  • GitHub社が提供している
  • Gitバージョン管理システムを利用する
  • Webサービスである

前提としてGitHubとは上記のものとして認識しておいてください。
まだ、ピンとは来ないと思うのでまずは何のために利用するのか説明します。

何のために使うのか

Gitバージョン管理システムを利用するWebサービスということですが、結局何をするために使うのでしょうか。

基本的な答えは、「ソースコードのバージョン管理をする」です。

では、「ソースコードのバージョン管理をする」とはどういうことでしょうか。

例えば、WordPressのレイアウトを変更するためにstyle.cssを変更するとします。
そのときに、変更前のファイルと変更後のファイルの内容、また、その変更点が履歴としてあとからでも確認できるようにするということです。

何が良いのか

ファイルの変更の履歴が確認できるのが一体なんだというのでしょうか。
しかし、ある程度プログラムなどを経験するとその重要性に気がつくはずです。

例えば、cssファイルでも編集を誤ればWebサイトのレイアウトが大きく崩れてしまうと思います。
一般的なプログラムでもバグが発生してしまった場合は、バグの改修や発生バージョンの調査が必要になります。
そのようなときに、いつどのタイミングのプログラム変更により問題が発生したかなどを確認するために、変更の履歴が必要になるのです。

え?それなら自分で常に変更前と後のファイルを保持しておけばいい?
不可能ではないですが現実的ではないですね。それを楽にするためにシステムと言うものがあるのですから。
また、一部の方はフォルダに以下のようなファイルが入っているのを見たことがあるかもしれません。(例はstyle.cssの場合)

style.css
styel01.css
改修前_style.css
改修後_style.css
新_style.css
style.css.bak

あるあるですが、何がなんだかわからないですね。
しかも質が悪いのは、「この中のどれか一つが最新とは限らない」ということです。例えば、「改修後_style.css」と「新_style.css」には、「style.css」から変更した「全く別の内容」が入っている可能性があるのです。

これは特に、複数人で開発をしているときに起きやすくなります。
そうです。このような複数人による編集でのバッティングを防ぐために、チームで開発をするとなるとバージョン管理システムはほぼ必須のツールとなるのです。

何ができるのか

GitHubはソースコードのバージョン管理に使うと書きましたが、結局何ができるのでしょうか?

実はここまで述べてきた「バージョン管理をする」機能はGitHubのサービスではなくGitというシステムでできることなのです。(Git≠GitHub)

ではGitHubはそんなGitを利用して何を提供しているか。
数多くある機能のうち、特にGitHubのGitHubたる部分をお話すると、

  • Gitのソースコードの保管場所をオンラインに
  • 自身の作成したソースコードを世界中に公開
  • 公開されているソースコードに対して、世界中のだれもが改修を行える

ということです。
つまり、GitHubは「オープンソースソフトウェアをGitの仕組みを利用して管理するサービス」という面がとても強いです。(もちろん他の人にソースコードを公開しないようにもできますし、サービスの利用方法によっては法人用として使うこともできます。)

そして、数多くのオープンソースのプログラムがGitHubで管理されています。
オープンソースのプログラムを読むことはプログラマとしてステップアップをするための良い方法ですし、それどころか自分からライブラリを公開したり、既存のライブラリの改修に携わることができるのです。
まさに新しい世界への扉ですね☆

まとめ

というわけで、「GitHubとはなにか」について述べました。
以下は本記事のまとめです。(はじめに書いたもの)

  • GitHubとは、GitHub社が提供している」「Gitバージョン管理システムを利用する」「Webサービスである」
  • GitHubはGitを使った「ソースコードのバージョン管理をする」ために利用する。
  • 「ソースコードのバージョン管理をする」と、「問題が発生した時の切り戻し」や、「複数人でのソースコード編集によるバッティング回避」に利用できる。
  • GitHubは特に「オープンソースソフトウェアをGitの仕組みを利用して管理する」ということに対して強い。

GitHubはプログラマをやる上では避けては通れないサービスと思いますので、ぜひ登録しましょう。
と言いつつ私も最近まで(存在は知っていましたが)登録していなかったので、次回の記事では登録方法について書きたいと思っています!

かんそー:
まとめをはじめと終わりに書くのは冗長な気がしてかっこよくないですね。
結局必要なことしか書いてるつもりはないので目次をつけてはじめのまとめはなくそうと思っています。(長くても読んでもらうor飛んでもらう)
ただ目次を実装するにはもう少し時間がかかりそうですね。。。そのうちやります。
ちなみにGitHub、もうすぐ日本語対応のWebサイトが公開されるようですね。
(GitHub、日本語Webサイトを3月公開予定 | NEWS | Macお宝鑑定団 blog(羅針盤))
ただ正直プログラマをやる上で日本のみの知識でやるのはとてもキツいので、英語版の利用をしたほうがいいと考えています。私はそうしてみます。

Webサイトにソースコードを載せる方法3 プラグイン(Crayon Syntax Highlighter)を使おう

どうも、キーです。
前回はgoogle-code-prettifyというJavaScriptを使いましたが、今回はCrayon Syntax Highlighter(くれよん しんたっくす はいらいたー)というプラグインを使ってソースコードを表示したいと思います。

なお、本サイトではCrayon Syntax Highlighterのプラグインは利用していないので、説明は画像が中心です。

公式

Crayon Syntax Highlighter — WordPress プラグイン

サンプル

こんな感じになります。

他と比較したときのメリット

  • 導入、使用が簡単
  • 多機能
  • 対応しているプログラミング言語の種類が多い(らしい)

他と比較したときのデメリット

  • プラグインなので積み重なるとサイトが重くなる
  • プラグインの範疇を超えるカスタマイズはできない(プラグインでできることが多いのでデメリットに挙げなくても良いレベル)

使い方

画像でざっくり説明します。

インストール

プラグインを検索してインストールします。


インストールが終わったらプラグインを有効化してください。

ソースコードを挿入

記事投稿ページのテキストモードに追加された「crayon」ボタンを使います。

ソースコードを入力したらAddボタンで確定。
※ツールバーを常に表示しときたい方は次を先に読んでから確定してください。

ツールバーを常に表示する場合などはここを設定しておけば良い。

エディタ上にでる。

ソースコードの修正、設定の変更

ビジュアルエディタの「<>」ボタンから編集画面にいけます。
ただ、前のツールバーの設定なども初期値が入っているので、もう一回すべて編集してから確定する必要があります。

結果

サンプルと同じです。
上の画像取るときは忘れてましたがタイトルにテストと入れています。

感想

導入がものすごく簡単なのはいいですね。
テーマの種類も多く、機能性はとても高いと感じました。

あと、ここに書いてある方法でうまく行かない場合もあると思います。
そんなときにはググりましょう。
ネットはソースを複数確認するのが大事です。

次回はGistを使ってみようと思っています。

参考

よく使われるプラグインなので他のブログさんもまとめていますね。
筆者が読みやすく学習の参考にさせていただいたサイトさんたちです。

Crayon Syntax Highlighterの設定と使い方:記事中にソースコードを表示 | affilabo.com
Crayon Syntax Highlighter – ソースコードを記事上で綺麗に表示できるWordPressプラグイン | ネタワン
Crayon Syntax Highlighterの使い方 | TechAcademyマガジン

 

Webサイトにソースコードを載せる方法2 google-code-prettifyで綺麗にソースコードを表示しよう

どうもキーです。
今回からブログなどにソースコードを載せるときに使える方法として、「pre要素 + code要素」からより実用的なものへ進んで説明したいと思います。

一般的に使わる方法はいくつかあると思いますが、本ブログではその中でも特にメジャーと思われる以下の3つを紹介予定です。

    • google-code-prettify (JavaScriptのライブラリ)
    • Crayon Syntax Highlighter (プラグイン)
    • Gist (GitHubのサービス)

これらは「シンタックスハイライト」という、プログラム中で特殊な意味を持つ単語に色をつける表示をすることができます。
今回は、本ブログでも利用している「google-code-prettify (JavaScriptのライブラリ)」を紹介します。

サンプル

今回は以下のようなイメージでソースコードを表示させます。

<pre class="prettyprint linenums"><code>
.wrap {
max-width: 1000px;
/* こんな感じ */
} 
</code></pre>

google-code-prettifyの種類

google-code-prettifyの使い方は2種類あります。

  1. CDN版
  2. ダウンロード版

CDN版はスクリプトのURLを読み込んで使用します。
ダウンロード版はスクリプトファイルをダウンロードして、Webサーバー上にアップロードして使用します。

ダウンロードファイルのほうがスクリプトファイルを編集できたり、外部のサーバーに依存せず使用できるため、Webサーバに自分でファイルをアップできないなど特別な事情がなければダウンロード版で良いでしょう。

以下ではダウンロード版の使い方を説明します。

準備

  1. ファイルのダウンロード
    現在はGitHub上にファイルが保管されているようです。
    (GitHub – google/code-prettify: Automatically exported from code.google.com/p/google-code-prettify)
    ソース一覧の右上の「Clone or download」から「Download ZIP」を選んでダウンロードしてください。
  2. Webサーバにアップするファイルを選びます。
    今回はまず使い方を覚えるために最小限必要なファイルだけをアップしようと思います。
    ダウンロードしたzipファイルを解答して「loader」フォルダの中から以下の2つを取り出してください。
    ・prettify.css
    ・prettify.js
    「loader」フォルダなどにある、「lang-xxx.js」のファイルはxxxに入るプログラミング言語の予約語を取り扱うためのものです。
    ただこちらは説明すると説明がかなり多くなるため今回は省きます。
  3. 自身のサイトデータを上げているフォルダに「code-prettify」というようなフォルダを作成し、上記の2ファイルをアップロードしてください。
    例えばWordPressなら「wp-content」フォルダがある場所と同じ場所に作る場合が多いと思います。
  4. 「header.php」でスクリプトを読み込みます。
    (時代的にはbodyタグの最後で読み込んだほうが良いのかもしれませんが、余計なトラブルは避けたいため一旦確実な方法で)
    例の如く「</head>」の前に記載します。

    <head>
    <!-- 中略 -->
    <link href="/code-prettify/prettify.css" type="text/css" rel="stylesheet"> <!-- デフォルトのスタイルシート読み込み -->
    <script type="text/javascript" src="/code-prettify/prettify.js"></script> <!-- スクリプトファイル読み込み -->
    </head>
  5. 「header.php」で上記で定義したスクリプトからソースコードの表示関数を実行します。
    「ソースコードの表示スタイルを変更する」という関数を定義しておくイメージです。
    珍しく「<body>」タグに記載します。「<body>」タグ自身を以下のようにしてください。

    <body onload="prettyPrint()" <!-- 他の処理がある場合はそのまま残しておく --> >

以上で準備は完了です。

使い方

前回(Webサイトにソースコードを載せる方法(1))紹介した、「pre要素 + code要素」を使う方法から、pre要素の記述に少し加えるだけです。
ソースコードを表示したい部分を以下のようにしましょう。

<pre class="prettyprint linenums"><code>
<!-- ここにソースコードを記載 -->
</code></pre>

これでgoogle-code-prettifyのスタイルでソースコードを表示できます。
class="prettyprint linenums"」は「prettyprint」スタイルで表示し、「行番号を表示する」という意味です。必ずpre要素に記載してください。code要素に記載すると違う動作をするようです。(使い方があるのかもしれませんが、私のところでは文字の色がうまく表示されませんでした。)

最後にブラウザのキャッシュを削除して動作を確認しましょう。

結果

ソースコードが綺麗に表示できる。
基本的な使い方はこれで十分ですが、準備手順の2番でも書いた通り、この状態では様々なプログラミング言語の予約後には対応していないです。
その他にも便利なカスタマイズなどもあるため、自身が慣れたら記事を書こうかと考えています。

キーのひとこと:
WordPressって奥が深いですね。
今までWeb系の技術に触れてこなかったので、JavaScriptやcss、レイアウトに関する知識などを一から学ぶ良い機会になっています。
Web系の技術は時代にもあっているので時代に追いつけるように勉強していきたいですね。

 

WordPressの子テーマは必ず利用しよう(2)

子テーマの簡単な使用方法

どうも、キーです。
前回(WordPressの子テーマは必ず利用しよう)は、WordPressにおける「子テーマ」の作り方を説明しました。

今回は、「子テーマ」の簡単な使用方法を説明したいと思います。

子テーマのファイル

「子テーマ」を利用するためには前提知識が必要です。
といっても前回説明した「親テーマ」の更新の影響を受けなくする。を達成するだけであれば以下の点を覚えていれば十分です。

  • 「親テーマ」「子テーマ」に同じファイル名のファイルがあった場合、「子テーマ」のファイルが使用される。
  • 「cssファイル」と「functions.php」は例外。特に「cssファイル」は「親テーマ」→「子テーマ」の順に読み込まれる。

※「functions.php」については読み込まれ方が複雑であるのと、今回その知識は必要ないので割愛。必要なときに書きます。

例1: header.php

親テーマには通常「header.php」というファイルがあると思います。
こちらの記事(Google Analyticsを導入しよう(WordPressブログのアクセス解析について))でも編集しました。

この編集を子テーマで行うようにし、親テーマの更新の影響を受けないようにしたいと思います。
といっても手順は簡単。

  1. 「親テーマ」の「header.php」を、FTPソフトなどでダウンロードするか内容をコピーしてテキストエディタに貼り付ける。
    ※文字コードはUTF-8にする。改行コードは自分が利用しているOSのものでOK(WindowsならCR+LF、現代のmacOS、LinuxならLF)。
  2. Google Analyticsを導入しよう(WordPressブログのアクセス解析について)の記事のとおり、コピーした「header.php」を編集する。
  3. ファイルを「header.php」の名前で保存する。
  4. FTPソフトなどを利用し、子テーマのパスに作成した「header.php」をアップする。

以上です。やっていることはコピーを作って編集するだけですね。

例2: style.css

次は子テーマのスタイルシートについてです。
スタイルシート(cssファイル)については前述しましたが、「親テーマ」→「子テーマ」の順に読み込まれます。
そしてスタイルシートの特徴として、同じ項目に対する記述は、後に書いたもので上書きされます。
つまり、上書きしたい項目文のみ記載すれば良いわけです。

スタイルシートの編集内容についてはこちら(WordPressブログのレイアウトを最低限整える方法まとめです。(Twenty Seventeen))を例とさせてもらいます。

上記記事で「style.css」の編集についてごちゃごちゃと書いておりますが、子テーマを用いて同じようにする場合は以下を前回(WordPressの子テーマは必ず利用しよう)作成した子テーマの「style.css」へ追記してください。

@media screen and (min-width: 48em) {

	/* Layout */

	.wrap {
		max-width: 1100px;
	}

	.has-sidebar:not(.error404) #primary {
		width: 	68%;
	}

	.has-sidebar #secondary {
		width: 26%;
	}
}

これだけでOKです。
ページ全体の表示の幅、記事の幅、サイドバーの幅を親テーマの設定から上書きしています。
@media screen and (min-width: 48em)などはページ内の要素を特定するための記述だったりしますが、気になる方はcssの書き方を調べてください。機会があれば記事にするかもですが。

結果

子テーマを使って以下の2つの記事の内容と同じ編集ができる。

※子テーマを更新してもレイアウトなどが反映されない場合はまず以下の「レイアウトが反映されない場合」をチェックしてください。それでもわからなければこの記事ではどうしようもないですが。

レイアウトが反映されない場合

真っ先に思い当たる可能性は以下の2つです。
これらを試して違った場合は他のブログも含めもっと広い範囲で調査したほうが良いかもしれません。

  1. 記述が間違っていないか確認する。
    当然ですが、これまでの記述のどこかで誤りがあればレイアウトが反映されないということもありえます。また、テーマが違う場合はすべてがそのまま使えるとは限らないです。テーマ名で検索しましょう。
  2. ブラウザのキャッシュをクリアする。
    レイアウトを確認しているブラウザのキャッシュをクリアしましょう。
    キャッシュ関連のプラグインを利用していなくてもまず試しましょう。
    私はプラグインないから大丈夫なはずとスルーしていたら見事にハマりました。

今後の構想

勘の良い方やもともと知識のある方は気づいているかもしれませんが、この方法にも問題点があります(かなり簡単にできるのはとても良い点ですが)。
問題に対応するには少し勉強が必要そうですので今しばらくはこの方法で行きたいと思います。筆者が問題に対応できるようになったら記事にしたいと思います。