2018年 01月の投稿を表示しています

docker-compose 自体を更新する

Github にリリースされていっているので、そこを見て、コマンドを実行したらよいといえば良い。

Releases · docker/compose

が、毎回見るのもあれなので、思い立ったときに動かせるようにしたいなあと思ったので更新するやつを作った。

sters/docker-compose-updater: Semi automatic docker-compose updater

原理はめっちゃそのままで、こんな処理をしている。

  • インストールされている docker-compose を which で探す
  • インストールされていなければ終了
  • curl と cut で Github のリリースページから最新版のバージョンを探す
  • OSとアーキテクチャを uname で識別(ドキュメントのまま)
  • Github のリリースページから最新版をダウンロードし、インストールされているものを置き換える(ドキュメントのまま)
  • chmod で実行権限を渡しておわり

Makefile がいいよ!って言われたので試しに見よう見まねで Makefile でやった。 Makefile のお試したかっただけ、みたいなところはある。なるほどなあ~~

 

どうやるのがいちばん良さそうかわからないけれど、docker-compose を扱う docker イメージがあってそっちを使うほうが楽そう…?

とはいえコンテナ内から docker-compose な操作をほにゃほにゃするとなると /var/run/docker.sock とか docker-compose.yml もといアプリケーションディレクトリをマウントしないと行けないので、記述がめんどうになりそうな気がする… というかちょっと試した程度ではできなかったのでうーん。
docker-compose って名前でエイリアスして、実態は docker/compose イメージを docker run してますよ~~みたいなものが出来ると、 docker-compose の準備する手間が無くてちょっとだけ便利になりそうなのだけど…

 

ちなみに作ったものと同じように、手元へと docker-compose バイナリを取り出すのはこんな感じ。

$ docker run --rm --entrypoint "" -v $(pwd):/tmp/bin docker/compose:1.18.0 cp /usr/local/bin/docker-compose /tmp/bin/

$ ls -l docker-compose
-rwxr-xr-x 1 root root 8479184 Jan 18 12:10 docker-compose

※ root が所有者になってるので移動させたりするときは sudo しないとだめ

docker-compose で LDAP 認証のリバースプロキシを設定する

色々が色々あって、社内限定ツールに Active Directory を参照した LDAP 認証を掛けることがある。
それ自体は別にいいのだが Docker を使ってペペッと作って展開するといったときがやや面倒になった。

ので、それを docker-compose を使ってリバースプロキシを作ったら解決できたよ、というメモ。

 

こんな感じで docker-compose.yml を作って。

version: "2"

services:
  application:
    container_name: "${APP_NAME}_application"
    build: ./docker-app
    volumes:
      - ./src:/var/www/html
  proxy:
    container_name: "${APP_NAME}_proxy"
    build: ./docker-proxy
    ports:
      - "${HTTP_PORT}:80"
    links:
      - application:application

docker-compose をやったことがある人はご存知と思うが、このときの ${APP_NAME} や ${HTTP_PORT} は環境変数を指していて .env ファイルなどを作り APP_NAME=hogehoge みたいなことをしたらいい。

余談なのだけど、ドキュメントみたら version 3 のフォーマットがいつの間にかリリースされていて(しらなかった!!)、そっちに移行していく流れのほうがいいよねって思った。
Compose file version 3 reference | Docker Documentation

 

こんな感じで ./docker-proxy/Dockerfile を作って。

FROM httpd:alpine
COPY ./httpd.conf /usr/local/apache2/conf/httpd.conf

 

こんな感じで ./docker-proxy/httpd.conf を作って。

# default configures
ServerRoot "/usr/local/apache2"
Listen 80
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so

<IfModule unixd_module>
    User daemon
    Group daemon
</IfModule>

ServerAdmin you@example.com
ServerName localhost:80

<Directory />
    AllowOverride none
    Require all denied
</Directory>

DocumentRoot "/usr/local/apache2/htdocs"

<Files ".ht*">
    Require all denied
</Files>

ErrorLog /proc/self/fd/2
LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog /proc/self/fd/1 common
</IfModule>

<IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>

<IfModule ssl_module>
    SSLRandomSeed startup builtin
    SSLRandomSeed connect builtin
</IfModule>



# Load modules
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule auth_basic_module modules/mod_auth_basic.so

LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule ldap_module modules/mod_ldap.so

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so


# LDAP
LDAPTrustedMode SSL
LDAPVerifyServerCert off


# Proxy
<VirtualHost *:80>
    ProxyRequests Off
    ProxyPreserveHost Off
    AllowEncodedSlashes On
    KeepAlive Off

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    <Location />
        AuthName "Basic Auth"
        AuthType Basic
        AuthBasicProvider ldap
        AuthLDAPURL [ここにLDAPを参照するのURI]
        Require valid-user
    </Location>

    RequestHeader unset Authorization

    ProxyPass / http://application/
    ProxyPassReverse / http://application/
</VirtualHost>

 

あとは docker-compose up -d --build などと実行したら出来上がる。

$ docker-compose up -d --build

 

Apache をつかっている理由としては nginx の場合は公式イメージの中で LDAP のモジュールが提供されていないこと、組み込む場合にビルドが必要なことがあげられる。 Apache のイメージであればデフォルトで LDAP のモジュールが提供されている。さらに言えば
alpine イメージでも提供されているので debian ベースなイメージなどと比べて、軽量で高速上げ下げ出来たりしてめっちゃ良いよねってところもあった。調べると debian ベースにビルドしてるものもあって、良いんだけどう~~ん。

まあ「docker nginx ldap proxy」とか普通のワードで調べたらイメージだったり Dockerfile だったりが出てくるので、そのあたりを使ってもよかったのかもしれない。

debian ベースで nginx 1.11.13 をビルドする。 PR したらマージされる感あるのでバージョンアップもやっていけそう。
h3nrik/nginx-ldap - Docker Hub

debian ベースで nginx 1.9.9 をビルドする。2 年前から更新されていないので今後も更新されなさそう感
confirm/docker-nginx-ldap: nginx Docker image with ldap support

nginx 公式なのだけど nginx で LDAP ではなく、横にいる LDAP してくれるやつがよろしくやる、というものでちょっと違うかも。
nginxinc/nginx-ldap-auth: Example of LDAP authentication using ngx_http_auth_request_module

あるいは nginx-proxy っていうめっちゃ便利なリバースプロキシできる君があるので、これをベースに LDAP 認証のモジュールを追加するっていうのが、お手軽楽ちんで一番いいかもしれない。
jwilder/nginx-proxy: Automated nginx proxy for Docker containers using docker-gen

 

とりあえず一旦のところは Apache でやったよっていう話と、 nginx でも調べたら出てくるよ、ってまとめでおわり。

Dead Rising 3 をひととおり遊んだ

以前のブログで書いたところから、エンディング S を獲得し、知られざる物語も一通り終わった。

以前の記事はここ。
Dead Rising 3 のメインストーリーを 1 週したよ | ごみばこいん Blog

 

エンディング S については、まあ、なんだ、普通に提示されるルートを通ればいいだけっぽいので、何も難しいことはない。

ボスキャラ全般にいえることではああるが、回避→コンボ武器で強攻撃→よろける→回避→…、の繰り返しで倒せてしまうのはちょっと味気なかった。ラスボスこそなんか特別感あればよかった(例えば巨大ロボになるとか)のだが、それもなく…。うーん。。

エンディング S に行く前に、残りの収集品を集めたのと、レベルが 50 になり、 PP もありあまって、スキルがカンストした。スキルがカンストしてもなお PP が増え続けていくのはワロタ。

知られざる物語については、エピソード 2 の途中までちゃんと収集品を集めていたが、途中で面倒になってしまい、クリアを優先した。実績解除マン、やりきった感はすごいのだけどそこまでやりきる気持ちはない…

知られざる物語はいずれもストーリーの前後を小話で補完するようなもので、ここについては満足度よかった。
エピソード 4 のラストシーンが、ゾンビ映画っぽい終わり方でちょっと感動したよね。

 

ここまでのトータルプレイ時間は Steam 上でみると 28.9 時間。実績解除率は 75 % 。

 

立て続けにメインストーリー 2 週目やるほどか、って気もするので、そのうちゾンビをバッサバッサする気持ちになったらまたやろうと思う。

とりあえず Dead Rising 3 はこのあたりでおしまい。次は Assassin's Creed 4 Black Flag をやろうと思う(ちょうどやりたかったところだし Uplay の無料配布ありがてえ)

phpcs の自作ルールを作ってみた

phpcs を使って、他のルールセットにはない、独自のルールを設定する方法を調べた。

存在するルールセットを組み合わせる

そもそも、存在しているルールセットを組み合わせたり、無効にしたりするには、 composer を使ってパッケージを入れるなどして xml ファイルに記載をしていけば OK 。
これは Github の Wiki にもやり方が記載されている。

Coding Standard Tutorial · squizlabs/PHP_CodeSniffer Wiki

xml ファイルの例

<?xml version="1.0"?>
<ruleset name="oreore_ruleset">
    <description>名前空間は無くてもいいよ</description>
    <rule ref="PSR2">
        <exclude name="PSR1.Classes.ClassDeclaration.MissingNamespace" />
    </rule>
</ruleset>

コマンドの例

$ phpcs -n --colors --standard="oreore_ruleset.xml" src/

調べたのはこれではじゃないよ

自分で 1 からルールを定義する

こちらも Github の Wiki 、同じページ(Coding Standard Tutorial)にも書いてある。 Creating the Sniff の項目。

が、ちょっとトラップがあって、 Creating the Sniff の項目だけ読んで進めると、足りないものがいろいろあって NG 。1からルールを定義するときにも xml ファイルは必要だった。

それを読みながら試しに作ってみたのがこれ。

sters/phpcs-myruleset-test: Create phpcs sniffer test repo.

実際に触ってみて、いくつかの制約があるっぽい(というか書いてある)

  • ルールを格納するサブディレクトリを作らないといけない
  • ファイル名の末尾が Sniff.php でないといけない
  • PHP_CodeSniffer\Sniffs\Sniff インタフェースを利用する
  • register と process メソッドを実装する

個別にもう少し詳しく深掘りする。

ルールを格納するサブディレクトリを作らないといけない

こんな感じで掘ると良さそう。
ルールセット名の下に Sniffs という名前にすると、自分で設定しているルールセットだよ~的な意味になるっぽい。

MyRule/Sniffs/HogeSniff.php

phpcs の実装としてはこのあたりにそう書いてあるように見える。
PHP_CodeSniffer/Ruleset.php at master · squizlabs/PHP_CodeSniffer

で、作ったディレクトリと同じ階層に xml ファイルを置く。中身は説明書き程度で、もし他のルールを継承したものを作っていく場合にはここに書き足していくと良いっぽい。

MyRule/rule.xml

<?xml version="1.0"?>
<ruleset name="MyRule">
	<description>MyRule Coding Standards</description>
</ruleset>

アプリケーションと同じところに Sniffer は入れないと思うので(関心の分離的にも別で管理しよう!)、別管理する気持ちで作っていくと良いと思う。

ファイル名の末尾が Sniff.php でないといけない

phpcs が Sniff.php でファイルを探している。実装はこのあたり。

PHP_CodeSniffer/Ruleset.php at master · squizlabs/PHP_CodeSniffer

なので、ルールを書いていくファイルは HogeSniff.php のようなファイル名でないといけない。

MyRule/Sniffs/HogeSniff.php

PHP_CodeSniffer\Sniffs\Sniff インタフェースを利用する

このあたりからは、ぼくの試した実装とにらめっこしてみたほうがいいかもしれない。

これは phpcs の Wiki にも書いてあるものと同じ、ハッシュコメントを警告するための Sniff 。

phpcs-myruleset-test/DisallowHashCommentsSniff.php at master · sters/phpcs-myruleset-test

インタフェースの利用については特にいうこともないので、はい。

register と process メソッドを実装する

引き続き、ハッシュコメントを警告するための Sniff を見ながら。

phpcs では対象となった php ファイル(あるいは他のファイルも指定できる)に対して、トークナイザを実行し、指定されたトークンに対してのみ process メソッドが動くように作られている。
その指定されたトークンを register メソッドで指定する。こういう感じで。

public function register()
{
    return [
        T_COMMENT
    ];
}

トークンの一覧は php.net の方にある。

PHP: パーサトークンの一覧 - Manual

php.net のリストを見ると T_COMMENT は 「 // or #, and /* */ 」にあたると書いてある。
これでコメントのトークンに限定して process メソッドを実行できる。

process メソッドはこんな感じで書いている。

public function process(File $phpcsFile, $stackPtr)
{
    $tokens = $phpcsFile->getTokens();

    if ($tokens[$stackPtr]['content']{0} === '#') {
        $error = 'Hash comments are prohibited; found %s';
        $data  = [trim($tokens[$stackPtr]['content'])];
        $phpcsFile->addError($error, $stackPtr, 'Found', $data);
    }
}

$phpcsFile は PHP_CodeSniffer\Files\File クラスのインスタンスで、今はどのファイルを対象にしているか、そのファイルのトークンは、といった情報が入っている。

$stackPtr はトークンスタックのうち現在の位置を示す int 。 register で指定したトークンが見つかった位置になる。当然のことながら 1 ファイルで複数見つかることもあるので、そのときは毎回 process メソッドが呼ばれるようだ。

$phpcsFile->getTokens() でトークンの一覧を取ることができ、これはトークンの二次元配列になっている。なので $stackPtr で参照することで、現在の位置のトークンが分かる。

トークンは以下のような形式で表現されている。

array(8) {
  ["type"]=>
  string(9) "T_COMMENT"
  ["code"]=>
  int(377)
  ["content"]=>
  string(8) "# echo
"
  ["line"]=>
  int(3)
  ["column"]=>
  int(1)
  ["length"]=>
  int(6)
  ["level"]=>
  int(0)
  ["conditions"]=>
  array(0) {
  }
}

そのトークンが、コード中の何行目にあって~、どのネストレベルで~、とかとか。このうち content に着目すると、そのトークンが持っている中身が見られる。

コメントの場合はコメント自体がまるっとトークンになるので、そのうちの先頭 1 文字をみて # だったらエラーを出すことで、ハッシュコメントを警告する Sniff の出来上がり。

自作のルールも phpcbf で自動でなおるようにしたい

お試したリポジトリには入れていなかったのだが addFixableError と fixer->replaceToken を使うことで出来るっぽい。

PHP_CodeSniffer/ClassDeclarationSniff.php at master · squizlabs/PHP_CodeSniffer

$fix = $phpcsFile->addFixableError($error, $stackPtr, 'SpaceBeforeKeyword', $data);
if ($fix === true) {
    $phpcsFile->fixer->replaceToken(($stackPtr - 1), ' ');
}

複雑なルールを作っていきたい

もしかしたら場合によって、もっと複雑なルールを設定していきたいような場合もあるのでは…?
そんなときどうするんだろうなあと思ったけれど、結局のところは気合で処理を書いていかないといけない(そりゃそうだ)

それは phpcs に含まれる PSR のルールを見てもそうだし Packagist にあるルールセットを見てもみんながんばってるのが分かる。

例えば PSR-2 のクラス定義に関する Sniff 。
PHP_CodeSniffer/ClassDeclarationSniff.php at master · squizlabs/PHP_CodeSniffer

「 1 つ前のトークンが空白で、改行で、その前が abstract か final だったらエラー!」とかそういう。

 

例えば… とおもって Packagist みていたら phpcs でセキュリティチェックしてくれる君があった。
FloeDesignTechnologies/phpcs-security-audit

その中に簡易的に XSS のチェックをしてくれるのがあるが、やっぱり頑張る
phpcs-security-audit/EasyXSSSniff.php at master · FloeDesignTechnologies/phpcs-security-audit

とはいえ、全部書くのもあれなので、 phpcs 側で用意されているユーティリティメソッドだったり、自分で便利に使うものを用意すると Sniff 本体が簡潔に書けて良さそうだ。

 

例えば処理の中や後ろにコメントを書くようなあれを警告する Sniff を作ってみたのがこんな感じ。

phpcs-myruleset-test/DisallowInlineCommentsSniff.php at master · sters/phpcs-myruleset-test

public function process(File $phpcsFile, $stackPtr)
{
    $this->tokens = $phpcsFile->getTokens();
    
    $tokenPrev = $this->findSomethingFirstOnLine($phpcsFile, $stackPtr);
    $tokenNext = $this->findSomethingLastOnLine($phpcsFile, $stackPtr);

    if ($tokenPrev !== false || $tokenNext !== false) {
        $message = "Disallow Inline comments.";
        $errorCode = 'inline_comments';
        $placeholder = [];
        $phpcsFile->addError($message, $stackPtr, $errorCode, $placeholder);
    }
}

findSomething.. は同じ行の前後に、自分以外の別トークンがいるかを探すメソッド。
findFirstOnLine というのが File クラスのメソッドにはあるが、微妙にそういう意図じゃないんだよ!というところだったので、参考にしつつ作ったのがコレ。行の情報があるので、ぐるぐるして、同じ行で別トークンがあるかな?を探しているだけで、特別難しいことは何もしていないとは思う。

おわり

特定のキーワード、特定の処理方法を警告するようなものは簡単に作れそうなので、余力があれば、チーム独自ルールみたいなものを phpcs に掛けられるようにすると、レビューコストが下がったり(?)、変な記述が生まれにくくて、いいなあと思ったとさ。

命名規則のようなちょっとむずかしそうなルールも、頑張ったら実装していくことは出来るので、そういうのを統一していきたいんだよね、みたいな事象のときに活用できそうだ。

Dead Rising 3 のメインストーリーを 1 週した

いつか Steam 上でセールをしていたときに購入しておいた Dead Rising 3 Apocalypse Edition をようやく今になって年末~年始あたりで一気にプレイ、メインストーリーをとりあえず一周しました。

※画像にはややグロ要素ありです※

プレイ状況

プレイ時間は Steam 上で見る限りは 18 時間。

サイドクエストは案内されたものはすべて消化…?掲示板から募集できる仲間は 20 人でした。他どこにいるんだ…。いくつかの設計図や収集物の取り方がわからなかったので、マップから見れる限りだと、9 割くらいとった感じ。

スキルはこんな感じです。

1 週目のエンディングでは C でした。あそこであの人を倒しちゃいけないのかー。。
ほかにも、エンディングに向けた分岐点が分かりにくい(プレイしていて選択肢っぽい要素がまったく見えなかった)ので、例えば「倒すかXXに行け」のように、ちゃんと示してもらえればなー。

武器

Dead Rising シリーズは初めてのプレイなのですが、落ちているものを組み合わせて、新しい武器を即席で作っていく様子は非常に面白かったです。スキルポイントの割り振りで、コンボ武器に振ると、アイテムのカテゴリ同士でコンボ武器が作れるようになり、お前その素材どこから出したんだよ感が凄いです。

メインに使っていたものは ZAR と 電動クラッシャーです。このびりびりするハンマーは非常に優秀で、ゾンビの大群を掃除するのに最適でした。 ZAR はどちらかというと、ボス戦だったり、硬い敵を遠距離でやらざるをえないとき、射撃系の仲間に持たせるときに使っていました。

そのほかでは、コンボ武器ではありませんが、長剣、バトルアックスが武器ロッカーからのコストも低く威力も高め(?)で、使い勝手がよかったです。

ハンマーが結構優秀すぎたのもあって、ほかの武器をあまり使っていなかったので、2週目はいろいろな武器を使っていこうと思いました。

あと置物系や押しもの系ってどこで役に立つんだろう…。長距離移動するなら車かバイク使っちゃうし…。そういう地形だとか、強制させるようなイベントがあるといろんなコンボ武器を使う必要に駆られるので、そういうのほしいなあなんて思いました。

ゾンビの大群

プレイしていて面白いなと思ったのは、メインストーリーが進むごとにゾンビの種類、数が増えていくところ。序盤はなんだヌルゲーじゃないかと思っていたのですが、チャプター 7 では道を埋め尽くすほどの数になっていて、街の反対側にいくのにも一苦労。。とりあえずハンマーが主軸になっていたので、ばこーんびりびりーってやってひたすらゾンビを押し進めるような形でした。

とはいえ、この大群な感じはとっても面白く、無双シリーズのようなバサバサ感はやっていて爽快感に溢れます。コンボ車両を作って、ドンパチやるのも非常に楽しいですね。

あと、大群でるのはいいんですけど、プレイヤーからちょっと距離取ったあたりのゾンビがまったく動かず判定もないのはちょっと微妙だなあ…遠距離まで届く武器の意味ないじゃんねー。設定さげているからそのせいなのかも?

そのほかのところで

街中で見つけたコスチュームを着まわせるが、イベントシーンにもそのコスチュームが反映されています。全体的にシリアス目なストーリーではあったと思うのですが、うっかりランジェリー+アフロ姿でイベントを進めると途端にバカゲーかのような印象に…!

グロ要素、ホラー要素はあまり強くなく、そのあたりが苦手目の私でも、もっとやりたいと思うくらいに、楽しくプレイできました。そういったものが苦手な人にも楽しめると思います。

 

ビデオ設定をかなり落とさないとフレーム送りになってつらいです。モノによっては影響が少ないのもあると思いますが、面倒になったので厳選していません。
(A8-7600, GTX750Ti, RAM 8GB)

 

さーて、真エンディング?目指していくぞ~~~。それと Apocalypse Edition だと DLC のストーリーもあるらしいので、そこも進めるぞ!

WatchDogs のメインストーリーをクリアした

最近はこたつにはまって、チョット前に Uplay でフリー配布していた Watch Dogs をしていました。
収集品を集めたり、ポリスメンとカーチェイスしてたりしたのですが、ようやくメインシナリオクリアしました。

やったことがない人だとわからないと思うのですが、これで背景はバグってないです。アニメーションしてます。

プレイ状況

最終的なプレイ時間はあとから確認できないようで、 Uplay 上の実績をベースに確認すると 12 月 3 日にハローワールドをして 12 月 29 日にログオフを解除していました。平日の半分くらいで 2-3 時間、土日に 4-5 時間くらいやっていたので、およそ 30-40 時間くらいでしょうか。

進行度としてはこんな感じ。収集品は途中で急に飽きが来てしまいました。。オンラインはオフにしていたのもあって、まったくやらず。

スキルはこんな感じ。ほぼフル強化。

評判を見ての通り、全体を通して善人プレイをしていました。潜在的な犯罪は楽しくやっていたのですが、けがさせないように早めに飛び出すとキャンセルされてしまうのもあって、なかなかうまくできていませんでした。

システムの侵入

システムへ侵入するとき、セキュリティを解除するために回線をつないでいくパズルは面白いアイデアだと思いました。ハッキングしたり〜なシーンを分かりやすく、それっぽく、プレイしやすく作るのってあんまりイメージなかったのですが、パズル化したことで、セキュリティ突破してるぞ感があってよかったと思います。
と、いうか、ガバガバセキュリティすぎやしませんか!?!?スマホポチポチやって乗っ取り、あるいは相乗りできるって…。まあきっと攻撃側の使ってるシステムが強力すぎるんでしょうね。

ストーリー

ストーリー面については公式サイトなどをちゃんと見てないのもあってか、バックグラウンドとか、なんでそんなハッキングするようになったのかとか、世界観的なものはちょっとわかりにくかったです。途中から収集品を集め始めたので ctOS や DedSec らへんの話が補完されて、なるほど〜〜という気持ちでした。
いくつかエンドのパターンがあるとロールプレイの楽しさも生まれてよりよいのかなーと思います。
全体ボリュームは結構満足な量でした。どちらかというと、メインストーリーを補完するような、ストーリー性のあるサイドストーリーがほしかったかなあ。フィクサー契約もギャング〜も悪いやつがいるから懲らしめよう!的なノリで、ストーリーに影響なかったなあーと。

リアルの世界で

全てがネットワークに繋がってて中央で集中的に監視するシステム・サービスがいて、スマホポチーでそれをハックして、銀行口座操作できたり盗聴できたり信号いじったり…。
現実味のあるんだかないんだか、面白いんですけど、逆に操作されてる側からしたらメチャメチャ怖い世界ですよね。

プライバシーもクソもない!!!

実際建物のあちこちに QR コード的なのあったら SNS なんかでめっちゃ話題になるよね、きっと。

 

実はウォッチドッグスにはカスペルスキーがシステムやセキュリティの面で監修に入っています。シナリオの正当性を評価したそうですよ。

Ubisoft社、「Watch Dogs」のシナリオ正当性評価を Kaspersky Lab JP

 

リアルな世界においては、DDoS なんかでサービス、サーバが落とされていたり、 SSH はもちろん様々なソフトウェアが狙われている昨今です。これが集中管理されるようなシステムになったら、もろもろの攻撃も集中しますし、トラフィックも集中しますし、運営したり開発したりするシステム会社クソ大変そうだなあと思う次第です。
住基ネット?マイナンバー?ある種そういったものを取り扱うようなシステムと似たようなもんなのかなあ。。そのあたりはあまりわからず。

 

ちなみに「ウォッチドッグス 現実」とかで検索するといろいろと面白いので要チェックです。例えば…

都市をハッキングできるか ― 『ウォッチドッグス』を都市インフラの専門家が検証 | インサイド
MR.RABBIT 聞いた事はあるけど、実際には見た事がないハッキングガジェット // Speaker Deck

 

余談ですけど ctOS の公式サイトがあるようです。ぱっと見はわからなかったけど DedSec がハックしてたりするんだろうか…?

CTOS

 

トータルして、めっちゃ面白かったので、ぜひ Watch Dogs 2 もやりたいなあという気持ちです。順番に積みゲーをやっつけていくので、そのうちやります。