ホーム ブログ ページ 23

データポータルを使って検索クエリを1,000件以上取得する方法

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

ウェブサイトの自然検索流入において、ユーザーがどんな検索クエリを利用しているかを知ることはユーザーニーズを理解する第一歩です。その検索クエリを調べる方法がサーチコンソール(旧ウェブマスターツール)の検索アナリティクスにありますが、機能制限として1,000件までしか取得できない仕様となっています。実は、Googleデータポータルはこんなところでも活躍するんです。

この記事でまとめられていること

こんにちは。株式会社アピリッツでアナリストをしているssekiです。
今回の記事では、Googleデータポータルを用いることで、サーチコンソールの機能「検索アナリティクス」の検索クエリを『簡単』かつ『最速で』1,000件以上取得する方法についてご紹介いたします。

サーチコンソールとは

突然ですが、あなたはどんな方法でこのDorubyのサイトを訪問しましたか?

TwitterやFacebookなどのSNS、他社サイトからの外部リンク、はたまた事前に登録したお気に入りなど、様々な流入元(チャネル)が考えられますが、おそらく多くを占めるのはGoogleやYahooの検索エンジンを使った自然検索流入かと思います。

同様に多くのサイトでは自然検索による訪問が主となっているため、SEO(検索エンジン最適化)と呼ばれる検索順位を上げる施策がセッション数を増加するために重視されています。

ところで、訪問してくれたユーザーがどんなニーズを持ってページを見つけてくれたのか・・・、気になりますよね。

ユーザーのニーズは検索に用いたキーワード、つまり検索クエリに表れます。その検索クエリを調べる方法がGoogleの提供するサーチコンソール(の検索アナリティクス)です。

サーチコンソールの制限

検索クエリを知ることのできるすごいツール!と感じるかもしれませんが、サーチコンソールはそこまで万能ではありません。
検索クエリを調べるための機能である検索アナリティクスだけに関しても、次のような制限があります。

  • フィルタなどカスタムした内容を保存しておけない。
  • 用意されているフィルタ以外で、自由にフィルタリングすることができない。
  • 一回に1000件以上の検索クエリを取得することができない。

下の画像では、「999行中」となっている通り、1000件以上の検索クエリを表示できていません。もちろん、ダウンロードしても999件しか取得できません。

enter image description here

そのため、必要な検索クエリを調べるために膨大な時間が必要になったり、そもそも取得するのが不可能だったりするというのがサーチコンソールの面倒なところです。

Googleデータポータルで制限を解除

これらの制限ですが、Search Consoleで用意されたAPIを用いれば制限を超えて検索クエリを取得可能です。
しかし、APIを利用するにはプログラミング知識やツール開発をするための工数が必要になるため、技術的・時間的に難しい側面があります。

それでは、簡単に制限以上の検索クエリを取得する方法はないの?ということですが、
実は、GoogleデータポータルではSearch ConsoleのAPIからデータを取得しており、かつ連携することを想定した設計がされているため、Googleデータポータルを使えばとても簡単に解決することができるんです!

データポータルで検索クエリを1000件以上取得する方法

方法は簡単です。サーチコンソールをデータポータルに連携し、検索クエリをディメンションに設定した表を作成するだけ。
まずは、サーチコンソールとの連携からやってみましょう。
enter image description here
上の画像のように、データソースの追加からSearch Consoleを選択すると、連携可能なサイトが表示されます。
サイトを選択すると、「サイトのインプレッション」と「URLのインプレッション」という表を選択できます。
今回はどちらを選んでも検索クエリを取得することが可能ですが、この2つの違いは以下の通りです。

– サイトのインプレッション:サイト全体を見るデータ。平均掲載順位を評価可能。
– URLのインプレッション:URL単位で見るデータ。ランディングページのURLを評価可能。

表を選んで接続が完了したら、次にレポート画面で表を作成します。ここでディメンションにQuery(検索クエリ)、指標にClicks(クリック数)を選ぶと検索クエリごとのクリック数を取得できます。
enter image description here
上の画像をみると、右下に「/23653」とありますね。これは23,653件の検索クエリを取得したということを表しています。

以上のようにデータポータルを使ってサーチコンソールの検索クエリを簡単に1,000件以上取得することができました。

まとめ:この機能はどんな人におすすめか

ウェブサイトを運営している方々にとって、サーチコンソールはなくてはならないツールです。
そのため、今回の機能を用いることで、これまでサーチコンソールでの検索クエリ探しに時間をかけていたウェブマスターの業務を大幅に短縮でき、より多くの検索クエリを見つけることでロングテールなニーズにこたえるサイト運営がしやすくなると考えられます。

また、今回は検索クエリの1,000件制限に焦点を当てましたが、Googleデータポータルを用いることでフィルタリングのかけ方などを保存しておくことも可能です。

サーチコンソール連携で有用なフィルタリングについて、今後記事にまとめていこうかなと考えていますのでご期待ください。

RailsでOracle~ Oracle Textで日本語検索

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Oracleに標準で備わっている日本語検索機能をRailsから使ってみましょう

データベース内のテキストから特定の語句が含まれるレコードを検索する必要がある場合、通常は弊社の提供する AdvantageSearch というサービスをお薦めしています。

しかし、OracleにはOracle Textというテキスト検索のための仕組みが標準で備わっているので、今回はそちらを使って検索機能を実装してみます。
https://blogs.oracle.com/oracle4engineer/oracle-text-v5

Oracle Textとは

Oracle Database本体に標準でバンドルされている、テキスト検索機能です。

欧文に対応したBasic Lexserのほかに、JAPANESE_VGRAM_LEXERと呼ばれる日本語に特化したトークン処理のエンジンを持っており、分かち書きのない日本語テキストに対して高速な部分一致検索を行うことができます。

V-GRAMとは

2文字単位で文字を区切っていくBIGRAM(2-GRAM)を、日本語の特性に合わせて拡張したアルゴリズムです。文頭に置いてはいけない禁則文字がトークンの先頭にこないように、トークンの長さを基本の2文字から伸ばしていくことから 可変gram という意味でV-GRAMと名付けられたようです。

詳しくはこちらが参考になります。
http://otndnld.oracle.co.jp/products/oracle8i/intermedia/htdocs/imt.htm

Railsからの利用

下準備

下準備として、DBユーザーに権限を付与したり、JAPANESE_VGRAM_LEXERのプレファレンスを作成したりする必要があります。こちらを参考に各自の環境に合わせて作業して下さい。
https://blogs.oracle.com/oracle4engineer/oracle-text-v5

マイグレーション

マイグレーションファイルを作成して、検索を提供したい VARCHAR2型, CLOB型のカラムにOracle Text用のインデックス(Context Index)を付与します。

add_index :users, :address, options: "INDEXTYPE IS ctxsys.context PARAMETERS ('lexer jp_lexer sync (on commit)')"

ここでは、前述の下準備で作成したプレファレンスに jp_lexer という名前を使用しています。

また、sync (on commit) というオプションによって、データベースにコミットした時点でインデックスの更新を行うように指定します。通常のインデックスとくらべて更新コストが重いため、文字量が多いカラムの場合は別のタイミングを選択する必要があるかも知れません。

今回使用しているOracle enhanced adapterには、もともとContext Indexを作成する add_context_index というメソッドが用意されているのですが、デフォルト以外のレクサーを指定することができないため、 add_index にオプションを渡すという方法をとっています。

ActiveRecordからの検索

Oracle TextLは独自の CONTAINS() という関数を使って検索するため、Oracle enhanced adapterには専用のメソッドが用意されてます。

class User
  has_context_index
end

この has_context_index というクラスマクロを記述することで contains というクラスメソッドがミックスインされ、

User.contains(:address, '大井町').order(:created_at).limit(10)

といった検索ができるようになります。

ただしこのメソッドには、別のテーブルと joins して検索したときにカラム名が重複していると正常に検索できないというバグがあるため、例えば

Corporation.joins(:customers).merge(Customer.contains("customers.address", '大井町'))

のように、contains メソッドにテーブル名も含めた名前を文字列で渡してあげる必要があります。

CONTAINS関数の注意点

CONTAINS() の検索式の中で使える独自の文法や予約語があるため、一般ユーザーの入力をそのまま渡すとSQLエラーになる場合があります。
意図して複雑な検索式を使用しない場合は、下記のドキュメントに記載されている予約語を { と } でエスケープするような処理が必要です。
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/text.102/B19214-01/cqspcl.htm

日本語以外の検索について

JAPANESE_VGRAM_LEXER を使ったインデックスでは、いわゆる英数文字で書かれたテキストは、空白区切りでトークンとして分解されるため、「目的の単語が含まれるレコードを検索する」という動作になります。

hogehoge fugafuga という文字列が格納されたレコードにヒットする検索語は hogehoge と fugafuga だけで、 hoge や fuga ではヒットしないことに注意して下さい。

まとめ

RailsからOracle Textを使ったテキスト検索機能を利用する方法について紹介しました。
AdvantageSearch にはかないませんが、なかなか便利な検索エンジンですのでみなさんも利用してみて下さい。

文章のリズムを考える

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

音楽にリズムがあるように、文章にもリズムがあります。
心地よく頭の中に入ってくる文章には、いいリズムが不可欠です。

5つのポイント

注意すべきポイントは以下の5つです。
・句読点を適切に使っているか
・接続詞を意識しているか
・文末表現が連続しすぎていないか
・一文の長さ
・改行のタイミング

これらを守っていれば、途中でつっかかることなくスラスラと読める文章が出来上がるはずです。

リズムを整える

例として、以下の文章を用意してみました。

今日はとてもいいことがありました。近所の雑貨店の閉店セールで掘り出し物をたくさん見つけました。

短い文章ですが、少し読みにくいです。
前述の5つのポイントを使って、直してみましょう。

今日はとてもいいことがありました。
近所の雑貨店の閉店セールで、掘り出し物をたくさん見つけたのです。

読点を打ち、文末表現を変えて改行をしただけでも、だいぶ声に出して読みやすい文章になったかと思います。
読み手にも気持ちよく文章を読んでもらうためには、こうした少しの工夫が重要になります。

リズムのいい文章になったかどうかは、実際に声に出して読んでみると分かりやすいです。

おわりに

自分の文章の癖を理解しておくと、後で見返した時にどこを重点的にチェックすればいいのかが分かります。
まずは自分の素の文章と向き合ってみるのもいいかもしれません。
私の癖は、副詞を置く位置がおかしくなってしまうことです。気を付けたいですね。

awesome_printでデバッグ/確認作業の効率化

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

awesome_printというコンソールの出力を見やすくしてくれるgemの紹介をしたいと思います。

普通にhashのデータを出力

enter image description here

awesome_printを使用したhashのデータを出力

enter image description here

パッと見わかりにくい配列の場合でもインデントを綺麗に揃えてくれるのでとても見やすいです。
enter image description here


インストール方法


  • Gemfileにawesome_printのGemを追加
# Gemfile
gem 'awesome_print'
  • Bundlerを実行
bundle install

おわりに

自分はrails consolepryを使っているのでawesome_printを使わなくてもある程度綺麗に表示されますが、irbの場合は出力がかなり見にくいと思うのでawesome_printを使うことをお勧めします。

*この記事内で使用しているユーザーデータは疑似個人情報データ生成サービスというサイトを利用して生成したものです。
https://hogehoge.tk/personal/

Unityで自動ビルドについて調べてみた

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Unityでできる自動ビルドについて調べてみました。

はじめに

Unityで複数プラットフォームに対してビルドを行うときにいちいち手作業でやることは面倒だと思いませんか?特にiOSのビルドはとても面倒ですよね?なので、Unityの自動ビルドについて調べてみました。調べてみたところ、以下の二つほど方法がありました。
・Uintyを使って外部コマンドからビルド
・CloudBuildを使用してビルド

今回は外部コマンドからUnityを起動してビルドすることについて書いていきたいと思います。使用した環境は、Unity 5.4.3 を使用しました。

コマンドライン上からビルド

コマンドライン上からビルドする方法についてお話しします
Unity上でのビルド方法は、BuildSettingsからビルドする方法があります。それをAndroid,iOSともに手作業やるのは結構大変なので自動化します。Unityのマニュアルを読んでみるとそのためのドキュメントが用意されていました。
URL https://docs.unity3d.com/ja/current/Manual/CommandLineArguments.html

macOSだと

/Applications/Unity/Unity.app/Contents/MacOS/Unity

でUnityをコマンドライン上から起動できます。ここに引数として様々な項目が設定できますのでそれらの項目を見ていきましょう。

-buildTarget buildTargetName

buildTargetNameにビルドしたいターゲットを入れてビルドするプラットフォームを切り替えることができます。

-executeMethod ClassName.MethodName

これはあるクラスの特定のメソッドを実行する引数でこれを使ってビルドを実行させます。例えば、BuildBatchクラスを作り、そこにBuildメソッドを作りBuildPipeline.BuildPlayerを実行することでビルドを実行することができます。

-projectPath pathname

Unityを開くときに指定するプロジェクトのパスです。これでどのプロジェクトを開くか指定することができます。

-quit

コマンドを実行した後 Unityを自動で閉じてくれる引数です。

上記に挙げたように様々な引数で設定できます。

まとめ

今回はUnityをコマンドライン上から呼び出してビルドする方法を紹介しました。
次回はUnityCloudについて調べてみます。

gretelでパンくずリストを作成

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

パンくずリストを比較的簡単に作成できる、gretelというgemが便利そうだったので使ってみました。

導入や使用方法は、配布しているgitページのREADMEを参考にしています
lassebunk/gretel

環境

macOS High Sierra(バージョン 10.13.1)
Ruby 2.4.1p111

Rails 5.1.4

前準備

パンくずリストを表示するページを作成しておきます。
今回は、ユーザ一覧ページに表示するようにしたいと思いますので、generateしておきます。

$ rails generate scaffold User name:string mail:string

導入

Gemfileにgretelを追記してインストール

gem 'gretel'

パンくずリスト用の設定ファイルを作成

rails generateを利用することで、設定ファイルを生成出来ます。

$ rails generate gretel:install
  Running via Spring preloader in process 17601
    create  config/breadcrumbs.rb

今回はUserページへのパンくずリストを表示させたいので、breadcrumbs.rbを編集します

# config/breadcrumbs.rb
crumb :root do
 link 'Home', root_path
end
# ユーザ一覧ページヘのパンくずリスト
crumb :users do
  link "ユーザ一覧", users_path
end
# ユーザ個別ページへのパンくずリスト
crumb :user do |user|
  link user.name, user_path(user)
  parent :users
end

サンプルを見ながら追記してみました。parentを指定することで、階層構造を表現出来るようです。

viewページへの導入

設定ファイルだけではもちろん表示までは出来ないので、viewファイルをいじることになります。
まずは、app/views/layouts/application.html.erb にbreadcrumbを使用するように記述します。

# app/views/layouts/application.html.erbの任意の場所に、以下を追記
<%= breadcrumbs pretext: "You are here: ", separator: " &rsaquo; " %>

先頭に記述するテキストやリストのセパレータなど、用意されているオプションを利用することで比較的自由にカスタマイズ出来るようです(今回は、サンプルをそのまま使っています)

続いて、パンくずリストを表示するそれぞれのページにも記載していきます。

・ユーザ一覧ページ
<% breadcrumb :users %>
・ユーザ個別ページ
<% breadcrumb :user, @user %>

以上で、パンくずリストを表示することが出来ます。
実際にアクセスした画像が以下になります。


ユーザ一覧ページ

ユーザ個別ページ

無事パンくずリストを表示させることが出来ました。

おわりに

今回は、パンくずリストを作成できるgem,gretelについて紹介いたしました。
オプションや記述を工夫すれば、より便利になりそうなので時間のある時にもう少しいじってみたいなと思いました。

【Ruby/Rails】Shift_JISなのかUTF-8なのかわからないCSVを開く【CSV】

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

よくCSVを読み込む時にファイルのエンコードが違っていて読み込めず例外が発生することが多々あります。そこで例外発生を抑える方法を記述します。

begin~rescueを使用してCSVを開く

例外が起こるたびに次の方法で開いていくスタイル。

def execute
  csv.each do |row|
    .
    .
    .
  end
end

private

def csv
  begin
    @csv = CSV.foreach(file_path)
    @csv.first # UTF-8で開けなかったらここで例外が起こる
    @csv
  rescue
    CSV.new(open(file_path, 'rb:Shift_JIS:UTF-8', undef: :replace)) # Shift_JISのCSVを開く
  end
rescue
  errors.add :base, '開けぬ...'
  raise
end

def file_path
...
end

gitの大文字小文字でハマった話

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

プロジェクトでバージョン管理にgit/GitLabを使っているのですが、そのgitの大文字小文字の扱いに落とし穴があって困った話です。

Gitは大文字小文字の違いを…

Gitはデフォルトでは大文字小文字の違いを無視する設定になっています。
なっているのですが、git mvを使わずにファイルの名前を変えたときは微妙におかしい無視のしかたをします。

今回はUnityエディタ上でImage.png を image.png にrenameしました。
(mvコマンドなどで名前を変えても同じ現象が起こります)

変えた後 git status でどういう状況になっているか確認してみましょう。

new file:   image.png

なんでやねん!!

違いを無視すると言っても Image.png と image.png を同じファイルだと思ってくれるわけではないようです。
これに気づかずにコミットしてpushすると、リポジトリ的には Image.png と image.png 両方存在することになります。

Image.png と image.png が存在するため、他の人が Image.png に対して変更をした場合、その変更は image.png には反映されません。
さらにImage.png と image.png が別のブランチで変更されてマージしようとしたときにさらなる悲劇は起こります。

コ ン フ リ ク ト

仕方ないな…と思ってgit statusで状況を見てみると

nothing to commit, working tree clean

こうなるともうどうしていいのかわかりません。
同じファイルなのか別のファイルなのかはっきりしてほしいです。

gitの外からmvコマンドなどで名前を変えても同じ現象が起こります。
git mvを使った場合、そもそも同じものだと認識されてrenameできません。

fatal: destination exists ...

解決策

なんとかしてマージしよう

こうなったときは問題のファイルを一旦どこかに退避させて消してコミットしてまた戻しましょう。
あるいは一旦まったく違う名前にしてコミットしましょう。

gitの設定を変えよう

Gitはデフォルトでは大文字小文字の違いを無視する設定になっています。

この設定のせいです。
大文字小文字の違いを認識させたい場合は設定を変えましょう。
git config -l で設定を見ると以下のような行があるはずです。

core.ignorecase=true

trueだと大文字小文字の違いを無視します。falseだと違いを認識してくれます。

まとめ

ファイル名変えた程度の変更の場合、手癖でついよく見ずにコミットしがちですが、よくよく確認しましょう。

[参考]
https://qiita.com/sawadashota/items/aa312a3b7e2403448efe

mysql ダンプとリストア

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

mysqlでデータをバックアップするときや、テスト環境のデータをローカル環境にコピーする時にダンプ・リストアを使います。今回は、ダンプ・リストアの方法と実際にやってみて発生した問題と対処方法についてまとめました。

ダンプ

ダンプは、DBのテーブルやデータをsqlファイルに変換します。DBのバックアップなどに使用されます。

DB指定のコマンドは、指定したDBのテーブル全てに対して以下の処理を順番に行います。テーブル指定のコマンドは、指定したDBのテーブルに対して以下の処理を順番に行います。
DB指定:$ mysqldump -u ユーザ名 -p データベース名 > 出力ファイル
テーブル指定:$ mysqldump -u ユーザ名 -p データベース名 テーブル名 > 出力ファイル
1. テーブル削除
2. テーブル作成
3. データ作成

ダンプには、いくつかオプションがあり、オプションを指定することで上記の処理を細かく分けることができます。

-dオプション:$ mysqldump -u ユーザ名 -p データベース名 -d テーブル名 > 出力ファイル
データ作成を行わずに、テーブル作成・削除のみ行います。

-tオプション:$ mysqldump -u ユーザ名 -p データベース名 -t テーブル名 > 出力ファイル
テーブル作成・削除を行わずに、データ作成のみ行います。

参考ページ:https://qiita.com/PlanetMeron/items/3a41e14607a65bc9b60c

リストア

リストアは、ダンプで出力したsqlファイルからテーブルやデータを作成・更新・削除します。

$ mysql -u ユーザ名 -p データベース名 < 出力ファイル

ダンプ・リストアで発生した問題

テスト環境のテーブルをダンプして、ローカル環境にリストアした時に発生した問題
mysql version:5.6.39
エラー内容:ERROR 1118 (42000) at line 394: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
1行に8126バイト以上のデータをリストアした為に発生した模様。エラーメッセージの通り、ROW_FORMATの設定をすることで解決することができます。

対処方法
/etc/my.cnfファイルに以下の設定を追加する。

innodb_file_per_table
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda

追加後に、mysqlサーバを再起動するとエラーが発生しなくなります。

参考ページ:http://sawara.me/mysql/2219/

マイグレーションでテーブルを作成して、マイグレーション前にダンプしたsqlファイルをリストア後、マイグレーションを実行した時に発生した問題
エラー内容:Mysql2::Error: Table 'テーブル名' already exists ...
リストアによってDBの状態がダンプファイル出力時の状態に戻ったが、マイグレーションで作成されたテーブルは、DBに残ったままなので、マイグレーション実行時に作成する予定のテーブルがすでに存在するとエラーが表示される。

対処方法
対象のテーブルを削除する。

半年で23kg痩せたダイエットでしたこと。

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

たまごです。 ここ半年ばかりダイエットをしています。経過は順調で現在23kg減です。以下、自分がダイエットするうえでやったことをまとめます。

ゴールの設定

半年間で20kg痩せる目標を立てました。無事当初の目標を達成したので、今は25kg減、その次の目標として30kg減を考えています。

マイルストーンの設定

月一でマイルストーンを設定し、目標体重を決めました。最初は落ちやすく体重が減ってくるにつれて減量しにくくなるはずなので、月ごとの目標体重もカーブを描くように設定しました。

具体的には、2ヶ月目までは-5kg、3ヶ月以降は-3kg、7ヶ月目以降は-2kgで目標を立てました。

進捗の記録

デイリーで進捗記録をしました。いわゆるレコーディングダイエットです。記録にはRecStyleというAndroidアプリを利用しました。シンプルで使いやすいダイエットアプリです。

マイルストーンに対して進捗が思わしくない場合は、改善策を打っていきました。また、あまりにも現実的ではない場合、それは当初の計画に無理があるということなので、マイルストーン側を変更する必要があると思います。期間を延ばしたり、目標値を下げたりです。

幸い、ほぼ進捗どおりか前倒しで痩せることができたので、最初に立てた計画はおおよそ妥当だったものと思われます。

定期報告

マイルストーンごとに定期報告することにしました。報告場所はクローズドなダイエットコミュニティです。報告の必要があるので、励みになります。

ダイエット施策

自分がとった施策はシンプルで、下記の施策を時期によって使い分けていきました。

・食べる量を減らす
・糖質量を減らす
・運動量を増やす

最初はとにかく食事制限によるダイエットでしたが、2~3ヶ月目くらいからそれだけではなかなか落ちなくなってきたので、運動を付け加えました。実施した運動は、腹筋・ウォーキング・自転車です。特に腹筋は、体重は落ちなかったとしても、お腹周りが鍛えられれば、それだけですごく痩せて見えるので、やってよかったなと思います。

栄養面のケア

食事制限していると、必須栄養素が不足しがちなので、補うためにサプリメントを常用するようにしました。ビタミン、ミネラルなどです。特にビタミンBは新陳代謝を活発にさせるためには欠かせないので、肉体改造するなら外せない栄養素です。

スキンケア

急激に痩せると、肌がたるみます。体重はすぐ落ちるけれど、皮膚の代謝には数ヶ月~半年程度かかるからです。そのため、急激に痩せると、肌がたるみ、結果老けて見えます。特に顔は顕著です。これを避けるためにスキンケアをする必要があります。

具体的には、

・上述したビタミン類を摂取して皮膚の代謝を早める
・筋肉を鍛え、その筋肉で皮膚のたるみを支える
・マッサージと保水

などです。

以上です。

Slackで便利な機能3つ

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

たまごです。 みなさんslack使ってますか。 今日は、個人的にslackで僕が便利だと思っている機能のご紹介です。

ユーザグループ

https://get.slack.help/hc/ja/articles/212906697-%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B

全体周知をするためにhereやchannelを使う機会があると思いますが、それだと通知スコープが広すぎるケースがあります。複数チームで同チャンネルを使っていて、特定チームにのみ周知したい場合などです。

そういう場合、ユーザグループの作成が便利です。

これは、メールでいうメーリングリストのようなもので、ユーザグループ宛てにメンションを投げると、そのユーザグループに登録されているユーザにだけ通知がとぶというとても便利なものです。

here乱舞ですと、常に通知ランプが灯って、かえってチャンネル確認が滞ったりするものです。宛先範囲を適切に設定することで、必要十分な範囲に発言を届け、必要十分なメッセージのみチェックすることができます。

スレッド

https://get.slack.help/hc/ja/articles/115000769927-%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B

そして、やはり便利なのがスレッド機能です。

大人数のチャンネルが早いのでなかなか追いづらいですが、スレッドなら話題ごとに集約してくれるので、チャンネルの流れをゆるやかにすることができ、チェックしやすくなります。

なお、無闇にAlso send to #channel-nameでチャンネル全体に返信させるのはあまり好きなやり方ではありません。スレッドの意義が薄れるからです。それなら、スレッド内で対象ユーザ向けにメンションを飛ばした方がスムーズだと思います。

リマインダー

他、強力なリマインダー機能があって、労働時間帯が違うメンバーに出社後にメンションしたい場合などに便利なのですが、リマインダー文法が日本人にとって直管的ではなく、あまり使いこなせていません。

塗りにひと手間加えてイラストの印象を華やかにする【後編】

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

引き続き短時間でイラストの印象を華やかにする方法についてまとめました。

はじめに

nocoです。
前回にも引き続き、時間をかけて塗り込まないでもひと手間でイラストを華やかに見せる方法についてご紹介します。
時短と手抜きは紙一重だなと思うのですが、ポジティブな方に捉えていただけましたら幸いです。

効果や背景を入れてイラストを華やかに見せる

模様やテクスチャを入れる

enter image description here
enter image description here
模様やテクスチャを入れるとデザイン的に見せられたり、塗りの密度が高くなることでベースがシンプルな塗りでも見応えが出ます。
オーバーレイや乗算などでサッと乗せるだけで全体の印象が大きく変わるため、つい色々試したくなってしまいます。
過剰な合成は元のイラストの良さを奪ってしまうので、全体ではなく部分的にかけるなど工夫すると良いかもしれません。
 

グロー効果をかける

enter image description here
アニメの仕上げやイラストのテクニックとしてよく使われる効果です。
明るい色の部分を発光させることでふんわりと優しい印象になります。
シンプルな効果ですが、肌に透明感が生まれ人物が活き活きするように感じられます。
 

背景を追加する

enter image description here
塗りとは少し離れますが、元のイラストには一切手を加えず簡単な模様の背景を追加しました。
イラストの全体的な色調の補色にあたる色を入れると失敗しづらく感じます。
キャラクターだけでなく、他の要素でも簡単に印象を華やかにすることができます。

おわりに

前後編合わせて全6パターンご紹介させていただきましたが、いかがだったでしょうか。
どれも5分足らずでできる内容なので、サッとイラストの見栄えを良くしたいときぜひ試してみてください。

塗りにひと手間加えてイラストの印象を華やかにする【前編】

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

短時間でイラストの印象を華やかにする方法についてまとめました。

はじめに

nocoです。
たくさんの時間を使ってひとつのイラストを描きたいと思っても時間は限られたものであり、いつもそうできるわけではありません。
そんな時、サッと描いたらくがきでも見栄えよく見せられないかと横着なことを考えたりもします。
なので今回は時間をかけて塗り込まないでもひと手間でイラストを華やかに(それっぽく?)見せるやり方についてご紹介します。

影や光の色に手を入れて華やかに見せる

enter image description here
アニメ塗りの女の子を用意しました。
ベースカラーはそれぞれベタ塗り、影色もグレー統一のシンプルなものです。
こちらのイラストの塗りにひと手間加えて、それぞれの印象の違いを見ていきましょう。
 

ベースカラーに合わせて影色を鮮やかにする

enter image description here
影色に彩度が高めの色を選ぶことで、ぱっと視認できる色数が増え華やかになります。
ベースカラーによって異なる3色を配置しています。
ベースカラーと影色の色相が離れすぎているとちぐはぐな印象になりやすいため、同系色を選ぶと元の印象を壊しません。
 

光と影の部分にオーバーレイのグラデーションを入れる

enter image description here
光部分に黄色、影部分に茶色のグラデーションをオーバーレイでざっくりとかけました。
塗りの一部にグラデーションが入るだけでイラストに空気感と透明感が生まれます。
イラスト全体の色調に合わせたオーバーレイの色を選んであげましょう。
光には明るめの色、影には暗めの色のグラデーションを入れると印象がまとまりやすいです。
 

影に思いきりビビッドカラーを乗せる

enter image description here
影色をビビッドカラーにすると一気にポップなイメージになります。
影色に合わせてベースカラーも色相を青系に振って爽やかなイメージに調整しました。
ビビッドカラーの主張がうるさすぎる場合は影の範囲を整理するとすっきりします。

おわりに

着彩においてありふれたテクニックかもしれませんが、ひとつひとつ分解していくとかなり量が多いことに気が付きました。
次回も引き続きひと手間のパターンをご紹介したいと思います。

Windows SubSystem for Linuxの導入の仕方

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。


Windows SubSystem for Linuxの導入について調べました

はじめに

私は業務でmacOSを使っているのですが、プライベートではwindowsを使っています。ふとした瞬間にコマンドラインからいろいろしたい時にwindowsだとLinuxのコマンドが叩けなかったりします。
結構不便に感じていまして、どうにかしてLinuxコマンドが使えないか調べてみました。
するとWindowsがLinuxを仮想化して立てられるようになっていたのでそれを使ってLinuxコマンドを使える環境を構築してみました。

Windows SubSystem for Linux とは?

windows10のAnniversary Updateで追加された機能の一つで、WindowsでLinuxが使えるようになるという機能の事です。
Windows上にLinuxをおいて、それを動かせるようにするもので、これを入れることでLinuxのコマンドなどを使えるようになります。

導入方法

機能の有効化

スタートボタンから「アプリと機能」をクリックして、アプリと機能のウィンドウを開きます。次に右上にある関連設定の所にあるプログラムと機能をクリックしてください。では右の欄にあるwindowsの昨日の有効化または無効化をクリックします。そこでプログラム機能ウィンドウが出てきますので、そこで「Windows Subsystem for Linux」を探してチェックボックスにチェックを入れて「OK」を押してくださいこれでインストールが始まりますので少し待ちましょう。インストールが終わると再起動を求められるので再起動してください。

ストアからのインストール

次にストアからWSLをインストールします。Microsoft StoreからUbuntuを探してきて「入手」ボタンを押します。インストールが始まるので、インストールが終わったらスタート画面にUbuntuがあると思うので、それを起動します。起動するとユーザ設定を求められるので設定してやります。プロンプトに従っていれば間違えはしないと思います。

ここまででLinuxコマンドを使えるようになりました。これでWindowsでもLinuxのコマンドが使えるようになりました。

まとめ

WindowsでLinuxコマンド使いたい時はWSLを入れましょう。

日常生活にSlackを取り入れよう!

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

ビジネス向けチャットツールSlackは、仕事だけでなく日常生活にも使うことが出来ます。 今回はリマインダー機能について書いていきます。

リマインダー機能

/remindと入力してエンターを押してみましょう。するとヘルプが現れます。

enter image description here

試しに、以下のように入力してみましょう。
/remind me to 爪切り at 7PM today
enter image description here
リマインド成功です!これによりその日の午後7時にSlackから通知が飛んできて、爪切りをしなければならないことを思い出せます。

meのところを@hogeとしたり、#channelとすることで特定の人、チャンネルにリマインドすることが出来ます。

基本的には、/remind (人物・チャンネル) to (タスク) (いつ)という書き方です。

『いつ』の部分に関しては、everydayで毎日を指定したり、every Fridayで毎週金曜日を指定したり、at 9AM every Fridayで毎週金曜日の午前9時を指定したりできます。

enter image description here

要するに、atのあとに時間を、そのあとに曜日や毎日といった指定ができます。

ちなみに私の環境では、atを省いてevery Fridayとだけリマインド登録すると、自動的に午前9時に設定されました。

また、登録したタスクは/remind listで確認が出来ます。

Slackのリマインダー機能は、本来はおそらくミーティングなどの予定をリマインドするために使うのが正しいと思われますが、私は前回の記事で紹介したTrelloを使うまでもないタスクについては、Slackでリマインドするようにしています。

おまけ

/shrugと入力して送信してみましょう。
enter image description here

【Rails】プレビュー機能等作成の際によくつかう小技

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

プレビュー機能って結構考慮する部分が多くて面倒だったりします。のでそこで自分がよく使っていることを紹介します。

よくあるプレビュー機能の作り方

ボタンにパラメーターをつけてアクション内のif文で分けたりする
app/views/products/edit.slim

= form_for @product do |f|
・
・
・
  = f.submit '保存', name: :submit, value: :save
  = button_tag 'プレビュー', name: :submit, value: :preview, formtarget: :_blank

app/controllers/products_controller.rb

def create
  if params[:submit] == 'preview'
    render 'show'
  else
    @product.save
.
.
.
end

def update
  if params[:submit] == 'preview'
.
.
.
end

煩雑すぎる!!
のでアクションを分けましょう。
でもformの向き先は1つなので通常では分けられないです。
が、そこでjavascriptの登場です。

おすすめなプレビュー機能の作り方

app/controllers/products_controller.rb

def preview
.
.
.
end

app/views/products/edit.slim

= form_for @product, html: { id: :product_form } do |f|



= f.submit '保存'
= link_to 'プレビュー', 'javascript:void(0)', id: :preview_button, data: { request_url: preview_product_path(@product)}

app/assets/javascripts/products.coffee
“`
$main_form = $(‘#product_form’)
$preview_button = $(‘#preview_button’)

$preview_button.click ->
original_action = $main_form.attr(‘action’)
$main_form.attr(‘action’, $(this).data(‘request-url’))
$main_form.attr(‘target’, ‘_blank’)
$method = $main_form.find(“input[name=’_method’]”)
$main_form.find(“input[name=’_method’]”).remove()
$main_form.submit()
$main_form.append($method)
$main_form.attr(‘action’, original_action)
$main_form.removeAttr(‘target’)
“`
ボタンを押したときにformの向き先を変えて仕舞えばいいのです!
変えた後は元に戻すのを忘れずに。
この方法はプレビュ−機能以外にも応用できるのでぜひ使ってみてください

Unityのエディタ拡張の話

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Unityのエディタ拡張で自分で作った最高のウィンドウを使いたい話です。

最高のUnity生活を送っていますか?

自分が書いた記事ではないのですが、
【Unity】メニュー項目を増やして君だけの最強のUnityを作ろう!
この記事を読んでしばらくたったことですし、そろそろUnityにより複雑なことをやらせたくなってきた頃ではないでしょうか。
そう…GUIウィンドウを開いてもう少し細かいことをやらせてみたいですね!しましょう。

ということで簡単なチェックボックスとボタンのあるウィンドウを出してみたいと思います。

自分でウィンドウを作ってみよう

ざっくり必要なことは以下のとおりです。

  1. EditorWindow を継承したクラスを作る
  2. 追加したMenuItemで呼び出される関数ではウィンドウを出す処理を書く
  3. OnGUIという関数内でウィンドウができたときのレイアウトをつくる

EditorWindow を継承したクラスを作る

EditorWindow はカスタムしたエディタウィンドウを作るとき親にするクラスです。

https://docs.unity3d.com/jp/540/ScriptReference/EditorWindow.html

継承しましょう!

using UnityEditor;

public class MyCustomEditorWindow : EditorWindow {
}

継承しました。

追加したMenuItemでウィンドウを出す

using UnityEditor;

public class MyCustomEditorWindow : EditorWindow {
    [MenuItem("Edit/OpebMyCustomEditorWindow")]
    public static void Open() {
        GetWindow<MyCustomEditorWindow>(true);
    }
}

MenuItemへの追加の仕方は別の型が書いた記事を参考にしていただくとして、
これでメニューのEdit以下に Open MyCustomEditorWindow という項目が追加され、Openという関数が呼び出されるようになります。

Openの中では
解説が少しややこしいですが、GetWindow でウィンドウが出せます。
一つ目の引数をtrueにすると、今作っているウィンドウが別のウィンドウで出てくるようになります。

さて、ここまでできれば今作っている画面が出るようになっているはずです(まだ中身のない空のウィンドウですが)。

空のウィンドウ

OnGUIを定義してウィンドウのレイアウトをつくる

このエディタにGUI要素を配置していきます。

チェックボックスを置くのは簡単で、UnityEditor GUILayoutのToggleを使います。
以下の例ではcheckBoxIsOn という変数にToggleのオンオフが入っています。

using UnityEditor 
public class MyCustomEditorWindow : EditorWindow {
    // ...

    bool checkboxIsOn = true;

    public void OnGUI(){
        checkboxIsOn = GUILayout.Toggle(checkboxIsOn, "チェックボックスです");
    }
}
チェックボックスのあるウィンドウ

最後にボタンを置いてみましょう。

using UnityEditor 
public class MyCustomEditorWindow : EditorWindow {
    // ...

    public void OnGUI(){
        checkboxIsOn = GUILayout.Toggle(checkboxIsOn, "チェックボックスです");

        if (GUILayout.Button("ボタンの文字")) {
            // ボタンを押したときに呼び出される処理
            Debug.Log(checkboxIsOn);
        }
    }
}

これで押すとToggleの状態を出してくれるようになりました。

完成品1
完成品2

まとめ

GUILayoutには他にも様々なGUI要素があり、項目もさらに増やすことができます。
ぜひ試してみて最高のUnity生活を送ってください!

HelperとJSで文字数カウント機能を作る

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Ruby on Rails でフォームなんかを作る際、テキスト入力部分に「文字数カウント機能」を付けたいと思うことが多々あります。 テキストエリアの右下とかに「0/30」とか付いてて、テキストエリアに入力するとリアルタイムにカウントしてくれるアレです。 JavaScriptで作れるのですが、テキストエリアがたくさんあるフォーム画面などで、 「こっちのフォームは300文字までだけど、その下のフォームは500文字まで入力できる」 などがあると、いちいち作っていると結構ごちゃごちゃしてきてしまいます。 この文字数カウント生成処理を、railsのhelperに全部入れると、けっこう分かりやすかったのでメモがわりの覚え書きです。

設置する文字数カウントの概要
* 「xx(現在の入力文字数) / xx(最大入力文字数)」の形で表示
* 入力文字数が最大文字数を超えた時、入力文字数の色を赤くする
* 各フォームで最大文字数の値はそれぞれ違う


まずviewを見てみます。
例えば「title」「text」という二つのカラムを持つColumnというモデルについて、
それぞれの値を入力するためのフォームを必要最低限の物だけ設置してみます。

<%= form_for(@column, url: url_path) do |f| %>
  <%= f.label :title %>
  <%= f.text_field :title %>
  <%= f.label :text %>
  <%= f.text_area :text %>
<% end %>

これだとラベルとそれぞれのテキスト入力エリアしかありません。
文字数カウントを設置したい・・ので、helperに作ってもらうことにしましょう。

def countable_field(model_name, model, attribute, maxlength)
    sanitized_model_name = model_name.gsub(/\]\[|[^-a-zA-Z0-9:.]/, '_').sub(/_$/, '')
    content_tag(:div, class: 'text_count') do
      len = model.send(attribute).to_s.length
      style = 'color: red;' if len > maxlength
      concat content_tag(:span, len, id: "#{sanitized_model_name}_#{attribute}_len", style: style)
      concat ' / '
      concat content_tag(:span, maxlength, id: "#{sanitized_model_name}_#{attribute}_max")
    end
  end

ちょっとごちゃごちゃしていますが、
countable_field という関数に「モデル名」「モデルインスタンス」「カラム名」「最大長」を渡すと、HTMLソースを作ってくれるようになりました。
現在の入力文字数部分は「モデルカラム_len」、最大文字数部分は「モデルカラム_max」のidが付くように統一してます。
form_forで出来る入力フォームのidにそれぞれ「len」「max」が付く形です。JSで使います。
初期値がある場合を想定して、テキストエリアの内容が既に最大文字数超えていた場合は、赤くするようにしています。

そして、JSで文字数カウント機能を作っておきます。
CoffeeScriptで作ってみたのが以下です。

$ ->
  $('.countable').on 'click keyup blur change paste input onload', ->
    countLength($(this))

countLength = ($field) ->
  len = $field.val().length
  $("##{$field.attr('id')}_len").html(len)
  countMax = Number($("#" + ($field.attr('id')) + "_max").html())
  countDown = countMax - len
  if countDown < 0
    $("##{$field.attr('id')}_len").css
      color: ‘red’
  else
    $("##{$field.attr('id')}_len").css
      color: 'black’

やっていることは「.countable」というクラスが付いたテキスト入力エリアに変更があったら、
「id : モデルカラム_len」のHTMLの中身に入力された文字数の数値を入れて、
「id : モデル
カラム_max」のHTMLの中身の数値より大きければ、文字色を赤くしています。

あとはビューでcountable_fieldを呼び出してあげればいい・・・のですが。

引数が面倒くさい

渡さなければならないのは「モデル名」「モデルインスタンス」「カラム名」「最大長」。
わりといろいろ渡してあげなければいけません。ちょっと面倒です。出来れば二つぐらいに減らしたい。

form_forの中で使いたいので、ActionView::Helpers::FormBuilderのサブクラスを作ってみましょう。

module ActionView
  module Helpers
    class FormBuilder
      def countable_field(method, maxlength)
        @template.countable_field(@object_name, @object, method, maxlength)
      end
    end
  end
end

先程つくったcountable_fieldメソッドを呼ぶだけの関数ですが、引数として渡すのは「カラム名」「最大文字長」だけになりました。
これをviewに仕込むとこんな感じになります。

<%= form_for(@column, url: url_path) do |f| %>
  <%= f.label :title %>
  <%= f.text_field :title, class: 'countable' %>
  <%= f.countable_field(:title, 100)%>
  <%= f.label :text %>
  <%= f.text_area :text, class: 'countable' %>
  <%= f.countable_field(:text, 500)%>
<% end %>

viewに足したのは各入力エリアにcountableクラスを追加したのと、countable_fieldを設置しただけですが、これで文字数をカウントしてくれます。
ActionView::Helpers::FormBuilderのサブクラスを作ることの利点としては、引数を減らすことに加え、
他のモデルについても「カラム名」「最大文字長」だけを渡せば流用できます。

また、form_forで出来る入力フォームのidをもとにjsが補足するので、
nested_formなどの動的にフォームが増えたりするものでも、揃えるようにすれば対応が出来ました。

ServiceWorkerを使う

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Service Workerは、ブラウザ上でWebページを表示していない時にでも実行できるスクリプトです。 GoogleのPWA(Progressive Web Apps)の実装に不可欠な技術ですが、ブラウザでスマホアプリのようなPush通知を実装したWeb Push機能に必須の機能です。 今回は簡単にServiceWorkerを試してみます。

ServiceWorkerが使えるか確認してみる

対応しているブラウザ: Chrome、Firefox、Opera
対応しているOS: Windows、macOS、Android

現段階では、WindowsのIEやEdge、iOSの全てのブラウザで使うことができません。
日本のシェアを考えるとiOS非対応なのはとてもネック・・・

ちなみに、対応しているブラウザかを調べるには、
navigator.serviceWorker
が定義されているかを確認します。

さて、ブラウザの開発ツールのコンソールから次のコマンドを実行してみます。

対応しているブラウザ(Chrome)だと
enter image description here

ServiceWorkerContainerというオブジェクトを返します。
このオブジェクトはサービスワーカの登録・解除・状態の取得などの機能を提供しています。

対応していないブラウザ(Safari)だと
enter image description here

undefinedが返ってしまいました。ダメだこりゃ。

ServiceWorkerを使うまでの準備

必要なもの

  • ServiceWorkerのJavaScriptスクリプト
  • インストールするためのJavaScriptコードを含んだHTMLページ
  • SSLまたはlocalhostでアクセス可能なWebサーバ

ServiceWorkerの実体

単なるJavaScriptスクリプトですが、
決められたイベントのうち扱いたいものを追加するだけ、というシンプルなものです。

対応している主なイベントは

  • install
  • activate
  • fetch
  • message
  • push

今回は、GlobalFetch.fetch メソッドが呼ばれたときに、コンソールにメッセージを出すというプログラムです。

self.addEventListener("fetch", function(event) {
   console.log("fetchメソッドが呼ばれたよ!");
});

今回はこのファイルを serviceworker.js という名前で保存します。

ServiceWorkerをインストールする

次に、ServiceWorkerをコントロールしたいサイトでインストールします。

ServiceWorkerContainerregister()メソッドを使います。

navigator.serviceWorker.register("serviceworker.js").then(function(registration) {
  console.log("登録されたよ!");
});

これを含んだHTMLファイル(index.html)を置いて、localhostにサーバをたてて試してみましょう。

簡単なwebサーバならば nodejsで動作する node-web-server が便利です。

インストールは

npm install -g node-web-server

で、起動はHTMLのおいてあるディレクトリで

nws

そして起動します。

http://localhost:8080/

enter image description here

無事インストールが完了しました。

ServiceWorkerがインストールされているかは、開発者ツールでも確認できます。

Firefoxの場合は、 ツール>ウェブ開発>Service Worker または about:debugging#workers
Chromeの場合は、 chrome://serviceworker-internals/

enter image description here

ServiceWorkerにイベントを処理してもらう

fetch リクエストのハンドラをかいたので、実際にfetchを呼び出してみます。

navigator.serviceWorker.register("serviceworker.js").then(function(registration) {
  console.log("登録されたよ!");
  fetch("sample.txt");
});

sample.txtは適当に作成してください。

enter image description here

ServiceWorkerが処理していますね。

Unityで作る2Dテクスチャ組込編

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Unityの中に2Dイラストを取り込みプレハブを作るまでのアレソレ

こんにちはtokinです。
Unityでは3Dだけでなく2Dゲームも簡単に作れます。しかしイラストは描けてもどのようにUnityに組み込んだらいいのでしょうか。そんなわけで今回は描いたイラストをUnityに入れ簡単なアニメーションをつけるところまでを分けて行いたいと思います。

①テクスチャを作る

enter image description here

②組み込み

enter image description here
enter image description here
enter image description here

最後に

基本的な構造はここまでですが、プレハブはコンポーネントをつけることで更に複雑な設定ができるようになります。当たり判定をつけたりSEをつけたり、また次の記事でお話しするアニメーションをつけたりなどUnityでは様々な設定をつけることが可能です。必要な要素を付け足していき、よりゲームらしいゲームを制作していきましょう。

次の記事「Unityで作る‼︎2Dアニメーション編

macのbashスクリプト上で文字列のcamelizeやunderscoreをしようとしたらperlに頼るのが楽だったこと

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

ruby on rails ではコントローラ名やそこで扱われるモデル名やインスタンス変数名の変換を行いたいときなど、文字列にcamelizeメソッドやunderscoreメソッドがある。 同様のことシェルスクリプト上で行おうとして探してみたところ、macのbash上ではperlを呼び出すのが楽だった。

bashでcamelizeやunderscore

rails上での String#camelize, String#underscore の例

str = 'happy_birthday_to_you!'
Str = str.camelize
 => "HappyBirthdayToYou!"
Str.underscore
 => "happy_birthday_to_you!" 
  • 環境 ruby 2.5.0 rails 5.0.6

bashでやってみる

まずはcamelize

sedを使うとできるらしい

str=happy_birthday_to_you!
echo $str | sed -re "s/(^|_)(.)/\U\2/g"
HappyBirthdayToYou!

sedで正規表現を使うことでできる。(redhat, debian)

ところがmac(Darwin)のsedではエラーになる。

str=happy_birthday_to_you!
echo $str | sed -re "s/(^|_)(.)/\U\2/g"
sed: illegal option -- r
usage: sed script [-Ealn] [-i extension] [file ...]
       sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]

perlを使えばmacでも動く

str=happy_birthday_to_you!
echo $str | perl -pe ‘s/(|)./uc($&)/ge;s///g’

つづいてunderscore

sed使用版

Str=HappyBirthdayToYou!
echo $Str | sed -r -e 's/^([A-Z])/\L\1\E/' -e 's/([A-Z])/_\L\1\E/g'
happy_birthday_to_you!

macだとやはり同じsedのエラー

perl使用版

Str=HappyBirthdayToYou!
echo $Str | perl -pe 's/(^[A-Z])/lc($&)/ge;s/([A-Z])/_$&/g;s/([A-Z])/lc($&)/ge'
happy_birthday_to_you!

できたこととする。

最近人気な記事