読者です 読者をやめる 読者になる 読者になる

頭の中は異空間

生活を日々ハックしてよりよくするブログ

【WordPress】ウェブサイト制作後にオプショナルとしてやっておいたほうが良いこと

WordPressでサイト制作が完了したら後付けでやっておいた方が良さそうな作業をいくつかメモします。

 

 

トップページに特定の固定ページ(トップなど)を出すようにする

bazubu.com

に綺麗にまとまっていました。

googleなどで検索してクリックしたときにトップページが最初に開かれるなら自然な挙動です。

 

 

管理画面ログインURL変更

ここから見れます。

ただ、導入したばかりだとログインのたびにメールが来ることが面倒に感じるかもしれません。ログイン履歴が煩わしい、消したいという場合はログイン詳細エラーメッセージの無効化からOFFにしてください。

f:id:notwo:20161117074139p:plain

 

 

SNSボタン設置

もしつけるならFacebook, Twitter, Lineの3つは押さえておいたほうが良さそうです。それぞれのデベロッパツールを利用してサイトに挿入すれば良いです。どれを使うにせよ、それぞれのアカウントを持っている必要があるので、まだなら先にアカウントを作っておくこと。細かいやり方はそれぞれの公式ページに頼るべきです。

いいね!ボタン - ソーシャルプラグイン - ドキュメンテーション - 開発者向けFacebook

Tweet Button — Twitter Developers

LINE Social Plugins

 

Twitterであればこれと別に公式アカウントの投稿をサイトに設置するのも面白そうです。

 

 

SEO対策

どちらかと言うとテクニック的なことより見やすさ、ユーザの直感に合ったコンテンツ配置、読み込み速度、ボタンやリンクのわかり易さ、といった使いやすさの向上が大事です。

少し前に話題になった某サイトのようにテクニックだけ重視して中身が疎かでは話にならないので、まず中身。次に余裕があればdescriptionやcanonicalなどをいじっていくと良いと思います。

ただし、この対策はすでに十分なコンテンツがサイト内に揃っておりユーザにとって使いやすいサイトになっている前提で、後付でやったほうが効果は出るでしょう。SEO対策だけやって中身がザル、ではお話になりません。

 

Google Analytics導入

まだanalyticsを導入していない人向けに。

まずgoogleアカウントを先に取得することが必要です。

 

Google アナリティクス公式サイト - ウェブ解析とレポート機能 – Google アナリティクスからまず自分のサイトのプロパティを作成します。出来たら

ウェブサイトのトラッキング

からタグをすべてコピーして、自分のブログなりサイトのHTML記入欄に貼り付けます。Adsenseと同様の要領ですね。

 

プロパティ作成済みであれば、

Google アナリティクス公式サイト - ウェブ解析とレポート機能 – Google アナリティクス

からログインし、管理→.jsトラッキング情報をクリック→トラッキングコードをクリック

f:id:notwo:20161117081005p:plain

で同様にコードがとれます。

細かいUIは変更される可能性があります。わからなくなったら都度ググること

細かいアクセス解析をする場合はSearch Consoleにもプロパティを追加しておいたほうがいいでしょう。

詳しいやり方は他所で散々説明されていることですので、あえてココでは書きません。

またWordPressではGoogle Analyticsを簡単に設定するプラグイン(自分はGoogle Analytics Dashboard for WPというのを使いました)もあるので、もしそれで事足りるのであればプラグインに頼るのも良いでしょう。

 

...というわけで内容的に初心者用ですが大事なことなので残しておきます。あとで自分でみて役に立つかもしれないので。

modal, modalessウィンドウをjQuery UIなしで実装

 

jQuery UIを使わずにmodalを表示するロジックをメモ書きします。

※modal, modalessウィンドウのサイズやカラーは適当

 

code

JS

// modal
var modalWindow = (function() {
  return {
    open: function(modal) {
      var $cover = $("div.cover");
      $cover.width($(window).width()).height($(window).height());
      $cover.show();
      modal.css("top", $(window).scrollTop() + 40);
      modal.css("left", $(window).width() / 2 - modal.width() / 2);
      modal.show();
    },
    close: function(modal) {
      $("div.cover").hide();
      modal.hide();
    }
  };
})();

// modeless
var modelessWindow = (function() {
  return {
    open: function(modeless) {
      modeless.addClass("modeless");
      modeless.css("top", $(window).scrollTop() + 40);
      modeless.css("left", $(window).width() / 2 - modeless.width() / 2);
      modeless.show();
    },
    close: function(modeless) {
      modeless.removeClass('modeless');
      modeless.hide();
    }
  };
})();

 

CSS

/* modal */
body {
  z-index: 1;
}

.cover {
  display: none;
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  opacity: 0.5;
  background-color: #aaaaaa;
  z-index: 990;
}

.dialog {
  display: none;
  position: absolute;
  /*top: 60px;*/
  z-index: 999;
}

.dialog_contents {
  border-radius: 5px;
  padding: 20px;
  background-color: #ffffff;
}

p.dialog_close_button {
  width: 1em;
}

/* modeless */
.modeless {
  border-radius: 4px;
  background: #3ff;
  box-shadow: 0px 0px 4px #333333;
  line-height: 0px;
}

 

HTML

overlayが必要です。ここではclass="cover"で実装します。modalもしくはmodelessウィンドウで表示したいコンテンツを書いて下さい。閉じるボタンを実装する場合と合わせて下記の通りに出来ます。

<div class="cover"></div>
<section id="section_id" class="dialog">
  <div class="dialog_contents">
    <p class="dialog_close_button">×</p>
  </div>
  ここにコンテンツ
</section>

 

 

使い方

modal用のHTMLを用意してmodalに表示したいコンテンツごとデフォルト非表示、何かしらのアクションを起こした際に表示するロジックをページごとJSで呼んでやればいいです。仮にボタンをクリックして呼び出すと想定して、次のように出来ます。

// open modal window
modalWindow.open($("#~~"));

// open modeless window
modelessWindow.open($("#~~"));

// close modal window
$("p.dialog_close_button").on("click", function() {
  modalWindow.close($("#~~"));
});

基本的に呼び出す側は呼び出し処理を1行で書けるとシンプルで見やすくなります。もしjQuery UIで実装するのであればもっと楽なんですが、あちらはたくさん独自のclassを追加してくれるので後々デザインが面倒になるでしょう。しかしdraggable()を使えばドラッグ可能に出来るしその他便利な機能もついているので中々捨てがたいものはあります。

Macbook Air、iTunesでiPhone等バックアップするために

 

Macbook Airに定期的にiPhoneバックアップをするのですが、これが人によっては数十GBは必要とするので結構な容量になってしまいます。対策として外付けHDDへ保存したいところ。ということで、簡単にメモを書きます。

 

一応この手の記事はすでにあるのですが、それらを見ても肝心のBackUpファイルの場所が分かりませんでした。そこでiTunesを使って確実にBackupファイルの場所を特定する方法が大事になります。

 

用意するもの

 

特定方法

iTunesを開き、環境設定からデバイスを選択。英語設定ですが日本語で読み替えること。

f:id:notwo:20170501080615p:plain
f:id:notwo:20170501080758p:plain

このようなフォルダが開く

ここでiPhoneの名前(デフォルトだと◯◯のiPhoneなど)を選択して右クリック→フォルダを開く

f:id:notwo:20170501080812p:plain
f:id:notwo:20170501080826p:plain

これでBackupフォルダを特定できました。ただ、名前だけ見てもどれがどれだかわかりませんが...普段から要らないBackupは削除したほうが良いでしょう。

 

HDDへ保存

外付けドライブをUSBポートに接続し、対象のBackupを移動するだけ。簡単ですね。iTunesの保存設定を変えたりも出来ますが、HDDをつけっぱなしにするのでもなければバックアップする際だけつけるとすればこの方法が一番ラクです。

【Mac】Heroku + Python環境構築

Heroku初心者向けに環境構築ネタということで書きます。まだ自分のアプリがない状態で、1からherokuで開発をすすめるためのメモです。

 

 

前提、やること

MacOS上で、CLIを使ってHerokuにPythonアプリをリリースします。

 

準備

Python

MacOSならPythonはプリインストールされています。予めバージョンは確認しましょう。今なら3系のはずです。

f:id:notwo:20170418082045p:plain

仮に2系なら、3系が必要なので下記リンク先の手順に従ってバージョンアップします。

qiita.com

バージョンアップが終わったら、下記コマンドで現行バージョンを確認して次へ。ここでは現時点で最新の3.6.0を使ってみたかったのですが、definition not foundだったので諦めて3.5.1にしました。

バージョンのリストは

pyenv install --list

で確認できます。

インストールしてみます。

f:id:notwo:20170418082200p:plain

もし上画像のように失敗したら、

qiita.com

の通りにやってみる。

f:id:notwo:20170418082122p:plain

今度バージョン確認したら、問題なくバージョンアップされていました。

以下、追記。

↑で変わったと書きましたが勘違いで、実際python -Vしたらまだ2系のままでした(泣)ん!?間違ったかな?

なので~/.bash_profileを開いて、

eval "$(pyenv init -)"

の1行が入っているかをチェック。私の場合は入っていませんでしたので追記してsource ~/.bash_profileします。python -Vしてみると、今度こそ変わりました。

 

pip

Pythonのバージョンアップ/インストールが完了していればもうインストールされているはずですので、バージョン確認します。

f:id:notwo:20170418082350p:plain

 

virtualenv

qiita.com

の通りにインストール

 

postgresql

qiita.com

の通りにインストール

でも、後でgettingstarted/settings.pyの中の設定を見ているとデフォルトでSQLite3が設定されているので、もしかしたら要らないかも?...ないと何か起こるのでしょうか。

 

Heroku

Herokuにアカウントを作ります。サイトに行けば説明が書いてあるし簡単すぎるのでここでは割愛します。

アカウントが出来たらPythonのappを作成します。

f:id:notwo:20170417080140p:plain

 

 

f:id:notwo:20170417080943p:plain

青枠3点を追加で確認します。pipがインストールされていなければインストールします。 VirtualenvとPostgreSQLもインストールします。上で既にやっていますね。

次のページに進みます。

 

Heroku  CLI

下画像の赤枠をクリックし、

f:id:notwo:20170419075706p:plain

Macインストーラを開きます。

f:id:notwo:20170419080511p:plain

pkgファイルのリンクに変わるので、Macにダウンロード&インストールします。これでherokuコマンドが使えるようになりました。そのまま同ページ内のheroku loginもやってしまいましょう。

そこまで終わったら、下記コマンドを打ってテストアプリを落とします。

git clone https://github.com/heroku/python-getting-started.git cd python-getting-started

close成功したら、下記コマンドを実行します。

heroku create

ログが出てアプリがherokuに作成されます。ログ中のURLをブラウザにコピペしてアクセスしてみます。

f:id:notwo:20170423083127p:plain

下画像のような画面が出ればOK。 

f:id:notwo:20170423083136p:plain

下記コマンドでデプロイ。

git push heroku master

何やらたくさんログが流れて、先程作成したアプリがherokuにデプロイされます。

デプロイが完了したら、先程アクセスしたURLを更新してみます。すると下画像のような画面に変わるはずです。

f:id:notwo:20170423083148p:plain

その後は

heroku open

でブラウザオープンしてサイトを開くことが出来ます。ひとまずここまで知っていれば自分のアプリをデプロイすることが可能になります。

公式サイトのそこから先を読み進めると、ログの見方やローカルでアプリを実行する方法、環境変数の設定方法、DBのプロビジョニングの方法などがまとまっています。逐一全ページをここで解説するのも骨が折れるし、説明が冗長になってしまうので、このくらいにしておきます。

 

ディレクトリの中身

作成されたディレクトリを見てみると、python-getting-started以下にhelloというサンプルプロジェクトが作成されているのがわかります。

~~~-MacBook-Air:python-getting-started ~~~$ ls
Procfile		app.json		manage.py
Procfile.windows	gettingstarted		requirements.txt
README.md		hello			runtime.txt

ファイル構成からして、またhello/views.pyの中身からしてDjangoフレームワークとしているようです。

[~~@]$ cat app.json
{
  "name": "Start on Heroku: Python",
  "description": "A barebones Python app, which can easily be deployed to Heroku.",
  "image": "heroku/python",
  "repository": "https://github.com/heroku/python-getting-started",
  "keywords": ["python", "django" ],
  "addons": [ "heroku-postgresql" ]
}

app.jsonを見るとaddonはデフォルトでpostgresqlのみ。ほか、リポジトリやプロジェクト名など見れます。

gettingstarted

[~~@]$ ls gettingstarted/
__init__.py	settings.py	static		urls.py		wsgi.py

hello 

[~~@]$ ls hello/
__init__.py	migrations	static		tests.py
admin.py	models.py	templates	views.py

 

Djangoでの書き方とPostgreの使い方が分かればあとは自由に改変出来ますね。

 

無料枠の注意点

以上はすべて無料枠で出来ます。しかしherokuの無料枠の仕様は適宜変更されます。用途によって有料化するか否かを決めるべきでしょう。料金体系については

qiita.com

が分かりやすかったです。どうやらいくつものアプリを24h稼働、は有料化する必要があります。しかし今やAWSやらAzureやらGoogle Apps Engineやら、クラウドサービスは競合があって選べるので、有料化する際にはherokuが本当に良いのか、他に移るべきか、見極めも必要と思います。

以上、ここでは本当に走りだけですが今後も新しく何か作ったりするたびに記事にしていきます。

 

まとめると

以上、PythonでHeroku上で開発ができるようになりました。既にこのネタはQiitaなどにも散々まとめられています。だから何番煎じかわかりません。それでも自分用メモとして残しておき、また画面からたどることで本当に初心者でもとっつきやすいメモになった自信はあります。何より記事を書きながら開発を進めていくのは楽しいし、仕事で淡々と作る時とは意欲に明確な違いがあります。このエネルギーが元で一気に開発が進めばいいし、躓いたらいつでも自分で書いた記事を見て振り返ることが出来ます。以前にもRailsAWSで初心者なりにやってみたことはまとめたので、それらが今後何かの役に立つことを願います。

【Ruby】カレンダー表示用日付配列を作成してみる

仕事で必要になって年度ごとカレンダーを表示するためのクラスを作ったので、ついでにメモしておきます。

 

code

Rails

def make_calendar
  today = Date.today
  calendar = {}
  start_day = today.beginning_of_month
  start_week = [1, 2, 3, 4, 5, 6, 7]
  end_week = ["", "", "", "", "", "", ""]
  end_day = today.end_of_month
  middle_week = []
  middle_days = []

  start_week.count.times do |index|
    index >= start_day.wday ? start_week[index] = index - start_day.wday + 1 : start_week[index] = ""
  end
  (end_day.wday + 1).times do |index|
    end_week.unshift(end_day.day - index)
    end_week.delete_at(-1)
  end

  week_day = 7
  last_day = start_week[start_week.count - 1]
  ((end_week[0] - start_week[start_week.count - 1] - 1) / week_day).times do |index|
    middle_days = []
    week_day.times do |day|
      middle_days.push last_day + day + 1
    end
    last_day = middle_days[middle_days.count - 1]
    middle_week.push middle_days
  end
  { start_week: start_week, middle_week: middle_week, end_week: end_week }
end

 

HTML(erb)

<% calendar = make_calendar %>
~~~
<%# 最初の週 %>
<% calendar[:start_week].each do |day| %>
  <%= day %>
<% end %>
<%# 間の週 %>
<% calendar[:middle_week].each do |middle_week| %>
  <% middle_week.each do |day| %>
    <%= day %>
  <% end %>
<%# この辺で折り返しさせたい %> <% end %> <%# 最後の週 %> <% calendar[:end_week].each do |end_week| %> <%= day %> <% end %>

 

考察

カレンダーをPCなり壁がけの紙でも良いので見てみると、最初と最後の週には前後の月の日付が入っていることに気づくはずです。ここではその前後の月にあたる日付を省いた、その表示したい月の日付のみを表示させます。first_week、 end_weekがそれに当たります。繰り返しのところに改行を挟んで表示させればそれっぽく見えるでしょう。CSSまで当てれば自分のオリジナルカレンダーが作れます。

ここではRubyで書いていますが、他の言語でも勿論応用可能。todayの部分を引数で渡せば好きな月のカレンダーを表示できます。

GAS(Google Apps Script)とフィルタを使ってGmailの整理を楽にしよう

Gmailを使って効率よくメール管理するための方法を簡単にまとめます。

 

 

 

ラベル作成

歯車マークをクリック→設定→ラベル→新しいラベルを作成

f:id:notwo:20170406080416p:plain
f:id:notwo:20170406081321p:plain

このとき、ラベルを階層構造にしたいなら、次のラベルの下位にネストをクリックして親ラベルを選択してください。

f:id:notwo:20170406082051p:plain

 これで、仕分けしたいメールの必要な分だけラベルをまず作成します。あとで見て分かりやすいように。

 

フィルタ作成

歯車マークをクリック→設定→フィルタとブロック中のアドレス→新しいフィルタを作成

f:id:notwo:20170407075133p:plain
f:id:notwo:20170407075146p:plain

フィルタは差出人(from)単位で作成します。ただし、このときメールアドレスの@から先のみを記述すること。これで、amazon.co.jpなど出品元がたくさんあっても@以下が同一の複数の差出人からのメールをまとめて同一にラベリングできます※1。

件名単位は便利そうですが使いません。スレッドという形で自動でまとめられるからです。

 

※1 例えばaaaaa@amazon.co.jpとbbbbb@amazon.co.jpが同一ラベリングされるということ。

 

GAS作成

スクリプトでは古いメールの定期削除をします。メールの量や頻度によりますが、例えばここでは3ヶ月前のメールを削除するとします。スクリプト自体は

notwodaily.hatenablog.com

で紹介しました。本記事では割愛します。

 

定期実行設定

スクリプト画面の時計マークをクリック

f:id:notwo:20170408094337p:plain

ダイアログが出るので、No triggers set up. Click here to add one now.をクリック

f:id:notwo:20170408094428p:plain

Current Project's triggersの設定をします。Runには今作った関数名を、Eventsで実行タイミングを設定します。ここでは毎月実行させるものとします。下画像のようにTime-driven, Month timerを設定。横の1は月に1度という意味になります。実行時間はMidnigh to 1 amの欄で変えられます。

f:id:notwo:20170408101108p:plain

 

考察点

ここでは60日前までを削除、つまり現在から約2ヶ月分はメールを保持します。昔のメールはまず見ないという体験を元に考えました。もしどうしても消したくないメールがあるなら事前に別のメールアドレスに転送するか、アーカイブしておいてアーカイブ済みメールは対象から除くなどしても良いでしょう。

 

まとめ

ここまでで、メールをフィルタ、ラベルで整理するとともにラベルごとに古いメールを自動で定期実行する設定までが完了しました。スクリプトや設定を変えれば、メールを転送したりアーカイブしたり、実行頻度を変えたり、検索条件を変えることで様々な要件に対応出来るようになります。大事なメールは自動でアーカイブするよう設定して、アーカイブ済みメールは別のメールアドレスに転送する、のような機能も面白いかもしれません。整理の仕方は色々です。

ヒューマンパワーと精神論に頼る時代遅れな方法よりも、こういう便利機能を使って手間を減らしていきましょう!

Swiss Selectionシリーズチョコが中々買えないので、コンビニやスーパーに置いてある別のチョコを買ってみる。

以前書いたSwiss Selectionシリーズのチョコレートについての記事

notwodaily.hatenablog.com

の続きです。

高CACAO成分のチョコレートの中で手軽に購入できてお気に入りだったSwiss Selectionシリーズの陳列されている種類が減ったことと、個人的な都合ですが引っ越したため近くに西友がないこともあって、中々あのシリーズを買うことが出来ずにいました。というわけでその代わりになりそうな高CACAO成分の他のチョコレートを見つけたので、メモっておきます。

 

 

明治チョコレート効果 ASSORT

f:id:notwo:20170222080344j:plain f:id:notwo:20170222080353j:plain

カカオ72%と86%が含まれます。ここまで苦いチョコレートは珍しいです。ミルクチョコレートでなくポリフェノールが入ったチョコレートが欲しい場合はおすすめできそうです。

 

明治チョコレート効果 CACAO72%

f:id:notwo:20170222081903j:plainf:id:notwo:20170222081917j:plain

この他、86%と95%が存在します。詳細はチョコレート効果のサイトから。慣れていないと本当に苦くて、これ単独では完食は難しいです。が、そのおかげで、気づいたら平らげていたなんてことはなくなるでしょう。

 

ダークチョコレート

f:id:notwo:20170222081259j:plain f:id:notwo:20170222081308j:plain f:id:notwo:20170222081722j:plain

中身はこんな感じ。

ベルギー産ということで輸入品です。業務スーパーで見かけます。250円近くしましたが詳細な値段は失念しました。なぜか商品案内ページで検索しても出てきません(笑)人気が出ると思うのに、なぜ載せていないのか疑問です。

これはダークチョコレートと言いつつカカオ50%程度でそこまで苦くないので、甘いものばかりでたまにはビターチョコレートにしたいという人向けです。

 

ホワイトチョコレート&ストロベリー

f:id:notwo:20170222082401j:plainf:id:notwo:20170222082412j:plain

ホワイトチョコレートです。上述のダークチョコレートと量は変わらず味と値段が違います(こちらのほうが少し高かった)。こちらはミルクチョコレート同様甘みが強いので、わざわざ買うほどかなあ、と疑問に感じます(笑)勿論検索で出てきません...

 

明治THEチョコレート

f:id:notwo:20170222082243j:plain f:id:notwo:20170222082320j:plain
f:id:notwo:20170222082339j:plain f:id:notwo:20170222082251j:plain
f:id:notwo:20170222082332j:plain

中身はこんな感じ。

これはものすごく売れ行きが良いですね。最近コンビニでもよく見かけます。デザインが良い、大きさ的に食べやすい、他のダークチョコレートよりも簡単に手に入る点が特徴です。コンビニで売られていることがメリットですね。私が好きなチョコレートはほとんど海外産なので、特定のスーパーでないと手に入りません...

 

 

まとめると

こうしてみると、国内では明治がダークチョコレート、というよりもビターチョコレートの販売に力を注いでいることがわかりますね。

ダークチョコレートはカカオ含有量が多い方がよくポリフェノールが豊富になるそうですが、ポリフェノールどれくらい含まれているかは基本書かれていません。そういう情報は別途取得して分かり次第記事にする予定です。

チョコレートの方もそこまで多くないですがまた見つけ次第追加していきます。