書籍概要

Software Design 20188月号

バックナンバー一覧

発売日
更新日

概要

第1特集
スマホゲームはなぜ動く?
意外と知らないサーバサイドのしくみ

これまで,Webアプリケーションのサーバサイドについては,本誌で何度か取り上げてきましたが,その中で1つの疑問が浮かびました。今,流行りのスマホゲームのサーバサイドってどうなってるのだろう?

そこで企画したのが本特集です。じつは,スマホゲームのサーバサイドも一般的なWebアプリケーションと同じようなシステム構成と通信手段で実現されています。とはいえ,同じ技術を使っていても,ゲームならではの課題を解決するために,さまざまなテクニックや工夫が駆使されています。これらの詳細は,ゲーム開発者以外にはあまり知られていないのではないでしょうか。ゲーム開発者になりたい人はもちろん,普段はゲーム開発に携わっていない人も,一読する価値ありです。

第2特集
クラウドネイティブ時代のシステム構築
独自構築か,PaaSか,サーバーレスか

クラウドファーストからクラウドネイティブへ,システム構築はクラウド・仮想環境上で開発を行い,コンテナで運用管理していくケースが増えています。そのため,たくさんの技術を知らねばならないので「コンテナ疲れ」してしまうエンジニアも少なくありません。

本特集では,さまざまなクラウドのスタイルをメリット・デメリットの面から理解を進め,コンテナ技術についても客観的に分析と解説を試みます。これによって自分が作り上げたいシステムにとって何が重要で,本当は何が必要なのか次第にわかるようになっていくでしょう。最後に「サーバーレス」について,実際にどのように導入を促進していくか解説します。

一般記事
[特別企画]Jenkins X+クラウドで快適CI/CD
【1】Jenkinsをクラウド化しよう

クラウド上での開発も当然なものになってきましたが,まだノウハウがいろいろと必要です。本特別企画では,仮想環境で開発にマッチした技術体系としてJenkins Xの導入を図り,数回にわたって環境構築を詳説します。まずはAzureクラウド環境の確認,それからJenkins環境の準備と構築から始めます。

一般記事
[短期連載]オープンソース&GitHub開発で役立つGPGの使い方
【2】GPGの基本「電子署名」「暗号化/復号」のやり方

暗号ソフトウェア「GPG(GnuPG)」は,コードやメールなどの作者を証明し,改ざんなどを防ぐ手段として,オープンソースソフトウェアの開発にはなくてはならない重要なツールです。本連載では,GitやGitHubで自分の電子署名を付けられるようになることを目標に,GPGの使い方を解説していきます。

第2回は公開鍵暗号を使って,ファイルに電子署名を行う方法と,ファイルを暗号化/復号する方法を解説します。GPGにおける鍵の種類,使い分けはしっかり理解しましょう。

一般記事
[短期連載]PHPで学ぶコンピュータアーキテクチャ
【3】画面表示のエミュレーション

世界初のコンピュータと言われるENIAC(エニアック)が生まれて70年あまり。現在のコンピュータの多くはノイマン型コンピュータと呼ばれる設計に基づいており,メモリに保存された命令を順番に実行していくという設計になっています。

本連載では携帯型ゲーム機「ゲームボーイ」と,その動作をソフトウェア的に再現したエミュレータのコードを読みながら,ノイマン型コンピュータのCPUがどのように命令を解釈し動作するのか,また,ディスプレイや入力装置とのやりとりをどのように行っているのかについて解説します。最終回となる今回は,画面表示についてです。

目次

第1特集
スマホゲームはなぜ動く?
意外と知らないサーバサイドのしくみ

  • 第1章ゲームならではの特徴,Webアプリとの違いとは?
    スマホゲームの全体像……武井 優樹
  • 第2章ゲームエンジンからアプリの審査まで
    クライアントサイド開発の勘所……山上 健一,田中 佑紀
  • 第3章急なアクセス増に備える!
    サーバの構成と運用……桐山 裕平,橋本 達也
  • 第4章軽快なゲーム展開の裏でどんな情報が交わされているのか
    クライアント/サーバ間の通信……本間 稔彦
  • 第5章膨大なアクセスを瞬時にさばき,快適なプレイを実現する
    高負荷向けのデータベース設計……武井 優樹
  • 第6章継続的なイベントの開催を支える
    スマホゲーム運営の舞台裏……三浦 彩

第2特集
クラウドネイティブ時代のシステム構築
独自構築か,PaaSか,サーバーレスか

  • 第1章:あなたはクラウドで何を実現しますか?
    …… 草間 一人
  • 第2章:コンテナ,CaaS,そしてKubernetes
    …… 草間 一人
  • 第3章:アプリケーションの開発効率を最大化するPaaS
    …… 草間 一人
  • 第4章:新しい考え方「サーバーレス」
    …… 草間 一人

一般記事

  • [特別企画]Jenkins X+クラウドで快適CI/CD
    【1】Jenkinsをクラウド化しよう
    …… 藤田 稜
  • [短期連載]オープンソース&GitHub開発で役立つGPGの使い方
    【2】GPGの基本「電子署名」「暗号化/復号」のやり方
    …… やまねひでき
  • 【最終回】[短期連載]PHPで学ぶコンピュータアーキテクチャ
    【3】画面表示のエミュレーション
    …… 長谷川 智希

Test Report

  • NETGEAR ReadyNAS徹底運用<第2幕>
    【6】クラウドサービスとの連携
    …… 後藤 大地

連載

  • ITエンジニア必須の最新用語解説
    【116】Android Things……杉山 貴章
  • digital gadget
    【236】おもちゃなガジェット……安藤 幸央
  • 結城浩の再発見の発想法
    【63】エクスポート/インポート……結城 浩
  • [試して理解]Linuxのしくみ
    【4】システムコール……武内 覚
  • 宮原徹のオープンソース放浪記
    【30】台風6号にも負けず,OSC沖縄開催……宮原 徹
  • 平林万能IT技術研究所
    【3】スマホを使ったプログラミングで3次元顕微鏡を作ってみよう!……平林 純
  • ひみつのLinux通信
    【54】バックグラウンド……くつなりょうすけ
  • 応用がきくDockerイメージの作り方
    【3】仮想マシンをDockerで運用する(前編)……樽石 将人
  • シェル芸人からの挑戦状
    【12】文章の修正(その2)……上田 隆一,山田 泰宏,中村 壮一,田代 勝也,青木 裕哉
  • Androidで広がるエンジニアの愉しみ
    【26】アプリ開発を助けるAndroid JetpackとApp Bundles……三宅 理
  • Vimの細道
    【31】ステータスラインを鮮やかに(vim-airline編)……mattn
  • 書いて覚えるSwift入門
    【39】史上最も地味なWWDC?……小飼 弾
  • セキュリティ実践の基本定石
    【56】IoT機器のセキュリティを技術者視点で考える……すずきひろのぶ
  • scikit-learnで学ぶ機械学習アルゴリズム
    【4】機械学習システムの構築フローとモデルの性能評価……小川 雄太郎
  • Debian Hot Topics
    【58】Debianとほかのディストリビューションとの違い……やまねひでき
  • SOURCES~レッドハット系ソフトウェア最新解説
    【23】RHELのコンテナ最新情報……小島 啓史
  • Ubuntu Monthly Report
    【99】ownCloudからNextcloudに移行する……あわしろいくや
  • Unixコマンドライン探検隊
    【28】ネットワーク(その5)……中島 雅弘
  • Monthly News from jus
    【82】ハンズオンで学ぶELF,かるたで学ぶバイナリデータ……法林 浩之
  • Hack For Japan~あなたのスキルは社会に役立つ
    【80】シニアプログラミングハッカソン!……小泉 勝志郎

サポート

ダウンロード

P.140 連載「scikit-learnで学ぶ機械学習アルゴリズム」

記事で紹介した機械学習システムの構築における「データ加工」「モデリング」を試すためのサンプルコードを以下からダウンロードできます。ダウンロードファイル「iris.zip」は圧縮ファイルです。解凍したうえでご利用ください。

圧縮ファイル内の「iris.ipynb」をGoogle Colaboratoryにアップロードすることで機械学習を試せます。Google Colaboratoryへのアップロード方法は,圧縮ファイル内の「Readme.txt」を参照してください。

ダウンロード
サンプルコード(iris.zip)

免責:本サンプルを使用することによって,使用者が受けたあらゆる不利益に対して,原著者および技術評論社はその責任を負いません。

補足情報

P.162 連載「Unixコマンドライン探検隊」

manで空のページや文字化けしたページが表示される場合の対処方法

macOSに導入したコマンドは,空のページが表示されたり,場合によっては文字化けしたページが表示されるなど,日本語Localeのmanpageが表示できないことがあります。ここでは,そうした場合の対処方法を紹介します(manコマンドについては,連載の第1回で解説しました。必要に応じてこちらの記事も参照してください)。

【nmapのmanpageが表示できない】

macOSでは,本家からnmap-7.60.dmgからインストール,brewでnmapをインストールした場合など,man nmapで空のページが表示されることがあります。この状態は,manが呼び出しているgroffコマンドが指定のロケールに対応していないことに問題がある可能性が考えられます。

  • manpageのソースの確認

/usr/share/man,/usr/local/share/manなどのmanpageのソースを確認ましょう。manpageのセクションごとにman1 …… man8などのように(日本語ロケールのものだとjaというディレクトリの中に同様にセクション別に)ソースが格納されています。対応ファイルが存在しなければ,manは表示できません。

まずは,日本語のmanpageの問題なのか,そもそもmanpage(が存在しないなど)の問題なのかを,POSIXロケールを明示的に指定して判別します。

C:POSIXロケールで,英語のページが正しく表示できるか確認する


$ LANG=C man nmap

 

これで,英語のmanpageが確認できて,
/usr/local/share/man/ja/man1/nmap.1も存在している(macOSのnmap-7.60,nmap-7.70などでは,
/usr/local/share/man/ja/man1/nmap.1が存在していて,内容も日本語のUTF-8です)なら,manが内部で呼び出しているgroffコマンドが日本語ロケールに対応していないのが原因と考えられます。続く,対応を試みてみましょう。

  • 1. 日本語に対応したgroffの導入

$ brew install groff


  • 2. 導入したgroffをmanが使うようにする

/etc/man.confを編集して,/usr/local/bin/groffを使うように変更します。編集するには,(sudoなどで)管理者権限が必要です。

/etc/man.confのJNROFFの記述部分


TROFF       /usr/local/bin/groff -Tps -mandoc -c
NROFF       /usr/local/bin/groff -Wall -mtty-char -Tascii -mandoc -c
#JNROFF		/usr/local/bin/groff -Tnippon -mandocj -c  (←ここをコメントアウト,以下の行を追加)
JNROFF      /usr/local/bin/groff -Dutf8 -Tutf8 -mandoc -mja -E  (←入力,出力ともUTF8を前提に,andocとjaマクロを使い,troffのエラーを表示しない,という指定)

 
  • 3. pagerの動作を制御する

同じく/etc/man.confの内容を編集して,groffがコントロールキャラクタを出力しますので,これをlessがうまく処理できるように-rオプションを追加してやります。

/etc/man.confのPAGERの記述部分


#PAGER       /usr/bin/less -is  (←ここをコメントアウト)
#BROWSER     /usr/bin/less -is  (←ここをコメントアウト)
PAGER       /usr/bin/less -isr  (←この行を追加)
BROWSER     /usr/bin/less -isr  (←この行を追加)


これで,man nmapで,日本語が表示できるはずです。

【manpageが文字化けして表示される場合】

筆者の環境では,nkf(文字コード変換コマンド)を導入しています。このmanpageは前節の対応をしても文字化けして表示されます。このケースでは,/usr/local/share/man/ja/man1/nkf.1の文字コードが,日本語UTF-8でないことが原因なので,ソースの文字コードをUTF-8に変換して解決します。

nkfで文字コードをUTF-8に変換する


$ sudo nkf -w --overwrite /usr/local/share/man/ja/man1/nkf.1

 

【まとめ】

ここでは,manpageにあまり日本語ページがないmacOSにフォーカスして解説しましたが,ほかのUnix環境でも,ロケールがきちんと対応していないコマンドや,ロケールに合ったフォントや文字コードテーブルなどの情報が導入されていない場合に,同様の問題が生じることがあります。きちんとしたロケール対応をすることができない場合,まずはCのPOSIXロケールでの表示を試してみて,原因を絞り込み,解決していきましょう。

【今回の(追加)チェック】

man(1), groff(1), less(1)

(本誌に掲載しきれず)Linuxで確認するコマンド

ufw(8), systemctl(1), samba(7)

商品一覧