13
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

qnoteAdvent Calendar 2019

Day 13

牛に言葉を喋らせる

Last updated at Posted at 2019-12-13

cowsay というプロジェクトをご存知だろうか。
その名の通り、牛に言葉を喋らせるという高尚なプロジェクトである。
私も兼ねてから、このプロジェクトに参加したいと思っていました。

そして今日、牛に言葉を話させることに成功した。

$ php say.php

< Ohmg I'm a cow! >
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

さらに、タックスにも言葉を喋らせられる。

$ php say.php -ctux -m僕はタックス!

< 僕はタックス! >
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/

さらには、ドラゴンも召喚できる。

$ php say.php -cdragon -mお腹がすいたよ

< お腹がすいたよ >
      \                    / \  //\
       \    |\___/|      /   \//  \\
            /0  0  \__  /    //  | \ \
           /     /  \/_/    //   |  \  \
           @_^_@'/   \/_   //    |   \   \
           //_^_/     \/_ //     |    \    \
        ( //) |        \///      |     \     \
      ( / /) _|_ /   )  //       |      \     _\
    ( // /) '/,_ _ _/  ( ; -.    |    _ _\.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/\      /                 ~-. _ .-~      .-~^-.  \
 (( /// ))      `.   {            }                   /      \  \
  (( / ))     .----~-.\        \-'                 .~         \  `. \^-.
             ///.----..>        \             _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

素晴らしい。

我が物のように書いてきたが、これは公開されているリポジトリを使っているだけです。
https://github.com/alrik11es/cowsayphp

コマンドラインで牛に言葉を喋らせる

リポジトリをクローンする。

ただ喋らすだけなら、クローンせず composer require alrik11es/cowsayphp で良いのだが、後ほどキャラクターを追加したいので、クローンする。

$ git clone git@github.com:zumikiti/cowsayphp.git
$ cd cowsayphp/

say.php を作る

say.php
<?php
require 'vendor/autoload.php';

use Cowsayphp\Farm;
use Cowsayphp\Farm\Cow;
use Cowsayphp\Farm\Dragon;
use Cowsayphp\Farm\Tux;
use Cowsayphp\Farm\Whale;

// コマンドラインから -c と -m を受け取る
$args = getopt('c:m:');

// それぞれ変数に代入
$char = $args['c'] ?? 'cow';
$msg  = $args['m'] ?? 'Ohmg I\'m a cow!';

// cowsayphp にデフォルトで用意されているキャラクターを代入
switch ($char) {
    case 'tux':
        $cow = Farm::create(Tux::class);
        break;
    case 'dragon':
        $cow = Farm::create(Dragon::class);
        break;
    case 'whale':
        $cow = Farm::create(Whale::class);
        break;
    default:
        $cow = Farm::create(Cow::class);
}

// 喋らす
echo $cow->say($msg);

コマンドラインで実行する

$ php say.php
< Ohmg I'm a cow! >
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

引数に -c にキャラクター名、-m で喋らせたい言葉を指定できます。

$ php say.php -ctux -m僕はタックス

< 僕はタックス >
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/

キャラクターを追加する

自分の好きなキャラクターを追加したいですよね。

例えば、みんな大好きカービィを追加したい。
src/Farm/Kirby.php を追加する

なお、カービィのAAは https://smashwiki.info/%E3%82%AB%E3%83%BC%E3%83%93%E3%82%A3%E3%81%AEAA からお借りしました。

src/Farm/Kirby.php
<?php
namespace Cowsayphp\Farm;

use Cowsayphp\AbstractAnimal;

class Kirby extends AbstractAnimal
{
    protected $character = <<<DOC

{{bubble}}
        \   ,-‐――、
         \/   ┃ ┃  ヽ-、
          し  " ∇ " |‐'
          ヽ___  _ノ、
          'ー-' ̄ `ー-'   

DOC;
}

say.php の switch に kirby を追加

say.php
    case 'kirby':
        $cow = Farm::create(Kirby::class);
        break;

コマンドラインで実行する

php say.php -ckirby

< Ohmg I'm a cow! >
        \   ,-‐――、
         \/   ┃ ┃ ヽ -、
          し  " ∇ " |‐'
          ヽ___  _ノ、
          'ー-'`ー-'

カービィのデフォルトのメッセージはぽよぽよ〜にしたい。

say.php
- $msg = $args['m'] ?? "Ohmg I'm a cow!";

switch ($char) {
...

    case 'kirby':
        $cow = Farm::create(Kirby::class);
+         $msg = 'ぽよぽよ〜';
        break;

...
}

- echo $cow->say($msg);
+ echo $cow->say($args['m'] ?? $msg ?? 'Ohmg I\'m a cow!');

コマンドラインで実行する

php say.php -ckirby

< ぽよぽよ〜 >
        \   ,-‐――、
         \/   ┃ ┃  ヽ-、
          し  " ∇ " |‐'
          ヽ___  _ノ、
          'ー-' ̄ `ー-'

終わりに

私が普段 PHP を使っているので、一番いじりやすいと感じた cowsayphp を使ってみましたが、cowsay は多くの言語で実装されており、さらには cow 以外のキャラクターを使ったものも多く存在します。

ざっと、GitHub で検索しただけでも以下リポジトリが見つかりました。

今回は、公開リポジトリを触ってみるだけになってしまいましたが、来年は私もコマンドラインで遊べる何かを作って公開してみたいと思いました。

13
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?