投稿者: ぜろみや

  • Advanced Custom Fieldsで、チェックボックスの値を全部取得したい

    Advanced Custom Fieldsで、チェックボックスの値を全部取得したい

    WordPressのプラグイン「Advanced Custom Fields」で、チェックボックス(セレクトボックス)の値を、選択してないやつも含めて全部取得したい。

    例えば、「月火水木金土日」という選択肢があって、「火水」しか選択してなくても、とりあえずリストとして全部表示させたいわけである。

    これはけっこう長いこと悩んでいて、あれこれややこしい方法で実装してみては「ほんまにこれしかないんか…」と調査しまくっていたが、ついにめっちゃ簡単な方法を見つけたので備忘録。




    実装

    関数”get_field_object()”を使う。

    例えば、”custom_week”というカスタムフィールドに、「月~日」の選択肢を用意しており、更に土日を選択しているとき、値は以下のようになる。

    $week = get_field_object('custom_week');
    echo '<pre>';
    var_dump($week);
    echo '</pre>';
    
    // 以下、出力部分
    array(15) {
      ["key"]=>
      string(19) "field_59b111613d05f"
      ["label"]=>
      string(9) "営業日"
      ["name"]=>
      string(14) "custom_week"
      ["_name"]=>
      string(14) "custom_week"
      ["type"]=>
      string(8) "checkbox"
      ["order_no"]=>
      int(1)
      ["instructions"]=>
      string(0) ""
      ["required"]=>
      int(0)
      ["id"]=>
      string(24) "acf-field-custom_week"
      ["class"]=>
      string(8) "checkbox"
      ["conditional_logic"]=>
      array(3) {
        ["status"]=>
        int(0)
        ["allorany"]=>
        string(3) "all"
        ["rules"]=>
        int(0)
      }
      ["choices"]=>
      array(7) {
        ["月"]=>
        string(3) "月"
        ["火"]=>
        string(3) "火"
        ["水"]=>
        string(3) "水"
        ["木"]=>
        string(3) "木"
        ["金"]=>
        string(3) "金"
        ["土"]=>
        string(3) "土"
        ["日"]=>
        string(3) "日"
      }
      ["default_value"]=>
      string(0) ""
      ["layout"]=>
      string(10) "horizontal"
      ["value"]=>
      array(2) {
        [0]=>
        string(3) "土"
        [1]=>
        string(3) "日"
      }
    }

    “var_dump()”でデバッグしてしまえばだいたいわかるけど、この場合

    “$week[‘choices’]”

    で選択肢を配列で全部取得できる。あとはforeachで回すなりなんなり好きにしちゃいましょう!

    繰り返しフィールドだろうとなんだろうと、get_field_object()で全値をとって、var_dump()で中身を見てしまえばなんだってできるね。

     

    以上、現場からでした。

  • 【jQuery】フォームの二重送信を防止するシンプルな方法

    【jQuery】フォームの二重送信を防止するシンプルな方法

    フォームの「送信」ボタンを連続で押すとメールが多重送信されちゃうから、それを阻止したいとなった。

    独自でフォームを作っているなら、phpでトークンを使って検証して動作を制御なんてこともできるんですが、WordPressでプラグインとかを使っている場合、phpをいじるのはちょっと現実的ではない。

    というわけで、今回はjQueryで3分でできちゃう方法をご紹介します。




    実装

    HTML

    フォームのHTML。とりあえずサブミットボタンにIDをつけましょう。

    <input type="submit" id="double" value="送信する">

    余談ですが、cssでスタイリングするときはclass、javascriptで動かす場合はidにしておくとわかりやすくていいですよ。また、classじゃなくてidで動かしたほうが圧倒的に処理が速いみたいです。僕はスタイリングの際はほとんどidを使用しません。

    jQuery

    たった3行。

    $('#double').on('click', function () {
      $(this).css('pointer-events','none');
    });

    “#double”をクリックしたら、それに{pointer-events:none;}をつけてるだけですね。シンプルー!

    pointer-events: none;はマウスホバーやクリック等のイベントの一切を禁止する神のようなプロパティで、便利すぎるのでちょいちょい使ってます。ボタンを1回クリックしたら、cssでそれ以降のイベントを禁止する。簡単ですね。

    欠点

    例のごとく、IE10以下では使えません。まぁ、もういいんじゃない?

    安全性も動作も完璧に仕上げたいのであれば、phpでがんばるしかないかなと思いますが、実装費用に比べて効果はどんなものかといったところで相談しましょう。けっこう大変ですよ。

    disabledじゃだめなの?

    フォームのパーツの操作を全面的に禁止する”disabled”というものがありますよね。実は僕も最初これを使ってやってみたんですが、サブミットボタンがdisabledになった瞬間、フォームの送信も中断されてしまうんですね。送信ボタンを押しても何も起きない。そして2度とボタンは押せないのである。

    巷ではこれを回避するために、ボタンが押されたらdisabledとなると同時に、ajaxで別途フォームの内容を送信するという方法が紹介されていましたが、これまたWordPressプラグインでやるのはきついです。

    cssでイベントを禁止するだけなら、フォーム送信を妨げることもありません。

     

    以上、現場からでした。

  • WordPress開発が捗る!ブックマークしておくべきCodexまとめ

    WordPress開発が捗る!ブックマークしておくべきCodexまとめ

    WordPressには関数やフック機能など、便利なものが一通り揃えられていますが、我々はそのほんの一部しか知りません。多すぎて覚えられるわけないし。なので、毎回「どうすんだっけなー」と探しちゃいますよね。

    WordPressには、WordPressの全てが記されているであろう「WordPress Codex」というWikiが存在するんですが、初心者のうちはあんまり見ないですよね。なんか、ググって出てきたコードをコピペする感じ。

    初心者のうちはそれでいいと思いますが、ある程度関数とかわかって自分でコードを書けるようになったらこれほどありがたいサイトはないので、ぜひ見てみてくださいね。今回は、その中でも開発に便利なページを紹介しますので、ブックマークしておきましょう。




    関数リファレンス

    リンク

    WordPressの関数が全部あります。ここだけでもブックマークしておけばとりあえずOK。

    条件分岐タグ

    リンク

    よく使う条件分岐タグ。ほぼどんなものでも条件分岐できちゃう。ログインしてるときだけとか、便利ですよね。

    テンプレートタグ

    リンク

    これ一つでいろんなテンプレートが呼び出せちゃうタグたち。

    管理メニューの追加

    リンク

    管理画面のメニューに項目を追加するための関数たち。テーマ開発やプラグイン開発には必須ですね。

    プラグイン API/フック

    リンク

    涙が出るほど便利だけど、鼻血が出るほどややこしい、フックについての基本が書かれています。特に「いつ関数を実行するのか」を指定するためのフックは開発でよく使いますね。

    ただ、使い方についてはCodexの説明は正直よくわからないので、ググったほうがいいです。僕もそのうち書く…かも。

    コーディング規約

    リンク

    WordPress開発するときのコーディング規約について書かれています。

    「コーディング規約?何それ?」となってる方はぜひ見てみてください。あなたのコード、たぶん相当汚いです。

    WordPressのコーディング規約は別に守らなくても誰からも怒られませんが、規約をなるべく守るよう心掛けるだけでも、綺麗で統一されたコードが書けるようになりますよ。なんか、WordPressしてるわーって気分になります。

    おわり

    以上、ブックマークしておくと捗りそうなページを紹介しました。最初はたぶん、見ても何書いてるかわからないと思うんですが、わかるようになればすごく楽しいです。特に、PHPの基礎がわかったら読めるようになると思いますよ。

    PHP初心者にまず読んでほしい一冊の本

    とりあえずざっと見て「こんなんあるんかー」くらいに認識しておいて、いざ開発で詰まったとき、「そういえば…」って思い出せたらいい感じ。

    ではでは、良いWordPressライフを!

  • WordPress 管理画面「ツール」に項目を追加する方法

    WordPress 管理画面「ツール」に項目を追加する方法

    管理画面のメニューとか「設定」内に項目を追加する方法はググればすぐ見つかったんだけど、「ツール」内に項目を追加する方法がすぐには見つからなかったのでメモ。

    使うのはadd_management_page()という関数でした。




    使い方

    使い方は以下の通り

    add_management_page( 'Custom Permalinks', 'Custom Permalinks', 'manage_options', 'my-unique-identifier', 'custom_permalinks_options_page' );

    使用例:

    function all_update() {
      add_management_page('一括更新', '一括更新', 8, 'all_update', 'all_update_page');
    }
    add_action('admin_menu', 'all_update');
    
    function all_update_page() {
      // HTML を表示させるコード
      ?>
      <div class="wrap">
        <h2>一括更新</h2>
        <p>ここにHTMLを書いていくよ</p>
      </div>
    <?php
    }

     

    プラグインをインストールするとなんでもかんでも「設定」に入りがちだけど、ツールっぽい機能はやっぱりツールにいれたいよね。ということで探してみました。

    add_management_page()でツール内に項目を追加する以外にも、「ユーザー」とか「ダッシュボード」とかにも追加できる関数をまとめて紹介しているCodexがありました。これをブックマークしておくと、プラグイン開発が捗りそうですね!

    現場からは以上です。

  • Web系フリーランスがとりあえず年収500万を達成するための仕事の取り方

    Web系フリーランスがとりあえず年収500万を達成するための仕事の取り方

    Web系フリーランスはどれくらい年収があると思いますか?200万?500万?それとも1000万以上?

    フリーランスの半分以上が年収200万を下回ると言われています。普通にうまくやってれば、400万~600万、そしてここに厚い壁があって、年収1000万を越えることができれば相当なやり手だと思います。

    この記事での話は「売り上げ」ではなく「年収」です!売り上げ3,000万円はイコール収入が3,000万円あるということではないので、ニュアンスに気をつけましょう。

    Web系フリーランスは、フリーランスの中でも需要があり仕事が溢れていますので、とりあえず生きていくための収益を得るのはさほどハードルは高くありません。

    今回は、Web系フリーランスがひとまず安定できるであろう年収500万を稼ぐためにできること、というか、実際現在フリーランス2期目にして推定年収600万程度の僕がやってきたことを紹介したいと思います。僕はコミュ力もないし、イケイケガンガンなタイプではないですが、その代わり計画性をもって物事を着実に進めていくというやり方で生き抜いています。つまり、僕がやってることは、真似すれば誰でもできる王道の稼ぎ方です。

     

    それでは本題やっていきましょう。本記事の構成は以下のようになっています。

    • 準備
    • 工数と単価
    • 単価を高める方法
    • 仕事の取り方




    準備

    何事にも下積み期間というのは大事です。

    ちゃんと準備を行うことで、独立後のスタートダッシュができるかどうかが決まります。何の経験も実績もない人に果たして仕事を頼みたいと思うでしょうか。また、未経験の人がちゃんとした仕事を行うことができるでしょうか。

    Webサイト制作というのは、お客様の売り上げに密に関わる仕事なので、責任も重いものです。そういった意味でも、ミスの許されない部分が多々あり、未経験の方になかなか仕事を頼むことはありません。

    フリーランスになる準備として最も効果的なのが、「実際に制作会社に勤める」ことで、現場を経験しておくことで技術的なことはもちろん、どんなミスをしてはいけないのかとそのミスへの対処法などを学ぶことができます。また、次に出てくる人日と工数の概念や、クライアントとの取引の方法などビジネス的なことも身につけることができます。

    これらのスキルはもちろん独学でも学べますが、会社で経験しておくことで、より正しく、より効率的に、そしてより安全に身につけることができますので、準備をしっかりしておけば、独立後すぐに軌道に乗ることが可能です。未経験のコーディングなんかはっきり言ってむっちゃくちゃですよ。もう、むっちゃくちゃ。技術だけでなく、言っちゃ悪いですが仕事とは何なのかがわかっていない人が多く、継続して取引しようなんて思えないです。

    準備については、詳しくはこちらの記事もどうぞ。

    ちゃんとしたフリーランスになるために準備した5つのこと

    工数と単価

    次は、実際にお金の話をしていきましょう。年収500万を得るための具体的な計算方法です。

    まず、制作における見積もり方法は、「工数」という考えかたが一般的です。工数とは簡単にいうと、「その作業を行うにあたってかかる時間」ということで、要するに時間×単価で見積もりを作るのが基本となります。見積りの付け方は、下の記事が参考になります。

    フリーランスの見積もり作成術~金額設定のコツ

    ここで大事なのは、自分の1時間の単価を何円とするかです。全く同じ仕事内容でも、単価が違うだけで金額が大きく変わってきます。

    例えば、1時間の単価を4,000円とした場合、500万円を稼ぐためには

    5,000,000 ÷ 4,000 = 1,250時間

    1年に1250時間働く必要があります。では、単価が5,000円だったらどうでしょうか。

    5,000,000 ÷ 5,000 = 1,000時間

    必要な時間は1,000時間。単価4,000円のときに比べ、年間250時間も短い時間で稼げます。だいたい月に必要な額が40万円とすると、1ヶ月で働く時間はたったの80時間です。お?なんかいけそうな気がしませんか?

    まぁ実際こんな単純計算にはならないことが多いんですが、基本の考え方としてはとても大事なポイントです。単価を高めることができれば、それはすなわち「自分の価値が高まった」ということです。自分の価値が高まれば、公言しなくても、わかる人には「なんかこの人できそう」って思われるもので、仕事が減るかと思いきや、意外にも仕事は増えます。安い労働力でとりあえず安く済ませたい人もいれば、高単価でもしっかり仕事をする人に頼みたい人もいますからね。

    え?安い労働力でもしっかり完璧な仕事してほしいもいるって?そういう人とは付き合わないほうがいいですよ。そういった世界から抜け出せないでいると、いつまで経っても光は見えてきません。

    単価の高い仕事をするか、安い単価でめっちゃ働くか…あなたはどっちがいいですか?もちろん単価の高い仕事でめっちゃ働けば更に収入は上がりますが、受託だけでそんなにがんばらないほうがいいと思います。空いた時間で事業を成長させていきましょう。



    単価を高める方法

    単価を高める方法は大きく分けて2つ。

    • 単価の高い仕事に絞る
    • しれっと単価を上げる

    単価の高い仕事に絞る

    単純に市場価値があって価格が高い(Pythonとかコンサルティング)という仕事もありますが、ここでいう単価の高い仕事とは、自分の得意な仕事です。

    例えば、トップページコーディングを20,000円で請けるとして、トップページのコーディングが4時間で終わるかというと、僕ならまず終わらないです。

    でも、WordPress構築での同じ20,000円は、おそらく2時間もあれば終わります。

    例えばなのでもちろん全部そうなるわけじゃないんですが、自分の得意な仕事というのは、ずっと経験している仕事なのでノウハウがたまっていたり、型が既にできあがっているので素早く高品質な作業を行うことができます。

    こうやって得意なことに重点を行って作業し、苦手な部分やただ時間のかかるだけの部分は外注にしてしまうというのが、受託で効率的に稼ぐ方法になります。会社とかそうですよね。仕事をとってきたら、それぞれの分野の社員に仕事を任せる。社員に任せるような仕事でもなければ、アルバイトを雇ったりします。それと同じです。

    単価の高い仕事をやるコツとしては、専門外のことはやらないとはっきり伝えることです。僕は、デザインはしませんとクライアントに言っていて、それでも問題なく仕事をいただけているのは、コーディング+WordPress構築の専門家だからですね。

    真面目に伝えるなら、「自分はこの分野のことを専門としています。これ以外のことは専門外ですので、もし受注するとしても外注との連携となるため、かなり高額になりますし、品質の保証もできません」という感じ。僕は実際によく言ってます🤗 ただし、専門のことに関しては例えどんなことだろうと、お金をもらう分の価値を提供します。

    しれっと単価を上げる

    僕は、フリーランス開始時はちょっと安めの単価だったんですが、しれっとごっそり2割くらい単価を上げてみたことがあるんです。

    …まったく問題ありませんでした。なんにも言われない。

    これは僕が会社員だったころも同じ経験をしていてびっくりしたことなんですが、単価が急に変わったら何かしら言われると思うじゃないですか。言われないんですよ。

    思うに、大事なのは「クライアントが、その金額を支払えるほどの価値を自分に見出してくれているかどうか」なんじゃないでしょうか。

    例えば、「ちょっと品質的には微妙だけど、安いし他に頼む人探すのもめんどいからまぁいいかー」くらいに思われてたら、単価を上げたらたぶん注意されるか、仕事が減るんだと思います。

    でも、「この人…もうちょい高くてもええのになーなんか申し訳ないわ…」って思われることがあるんです。何言うとんねんそんな都合のええ話あるかと思われるかもしれませんが、実際に言われたことがあって、もしかしてもうちょいいけるのでは?と思って上げてみたら、いけた。みたいな。

    自分がクライアントにしっかりと価値に見合った納品物を提供できているか、そしてクライアントが自分のことを信頼してくれているかを見極めて、こそっと上げてみましょう。勇気を出して数値を変えるだけで幸せになれる。なんということでしょう。



    仕事の取り方

    さて、いよいよ仕事の取り方ですね。いくら単価について考えたところで、仕事がなきゃ始まりません。

    仕事の取り方については、各々得意なやり方があると思いますし、僕でも「なるほどな~」と感心する方法で仕事をとってる人もいますが、ここではコミュ力も低く大した技術も名声もない凡人の僕でもできた、普通に王道の仕事の取り方を紹介します。

    ランサーズ

    で、出た~~~~!!

    はい、ランサーズです。クラウドソーシングは他にもクラウドワークスとかココナラとかありますが、Web系であればランサーズは案件が溢れ返っていて使いやすいので、とっかかりとしては便利です。

    ここでの最終目標は、ランサーズで仕事をとることではありません。もちろんそれも必要なんですが、その先の、良いクライアントとの継続取引にあります。

    よってここで狙うのは、中小企業や個人からの元請けではなく、広告代理店やWeb制作会社からの下請けです。

    急にビジネスライクな話になってきましたが、これも立派な戦術の一つで、フリーランスとしてまず最短で安定する収入を得たければ、絶え間なく入ってくる細かい仕事をこなすことが一番の近道です。そういった意味で、「既に絶え間なく仕事が入ってるであろう会社」に気に入ってもらえることで、じゃんじゃん仕事が入ってくるという算段です。

    ランサーズは良い会社に気に入ってもらうための入り口です。

    広告代理店であれば営業が複数人いる場合もあって、一人請ければ営業が急に2~3人増えたり、制作会社であれば、気に入っていただければ以降もプロジェクトに参加させていただけることもあります。制作会社のプロジェクトはかなりしっかりしていて高単価な場合が多いので、経験値もゴールドもごっそり入ります。まさにゴールデンスライム。

    良いクライアントを見つける方法は、

    • 単価がおかしくない
    • 募集内容がしっかりしていてわかりやすい
    • レスポンスも早く、「一緒に仕事してる感」がある

    とかですね。よくわからない仕事だったり、単価が常識を超えた安さだったり、受け答えに問題があるクライアントとは付き合わないほうがいいです。

    ランサーズについては以下の記事もどうぞ。

    https://meshikui.com/2018/03/31/209/

    https://meshikui.com/2018/10/25/1198/

    とはいえランサーズの単価はめっちゃ安いので、継続して案件をいただけるとなった場合は、金額の相談をしてみましょう。いやその値段じゃないと困るって言われたら…僕ならもう請けません😊 「あれはランサーズでの初回限定金額だったので」とか適当なこと言って縁を切るか…本当に最初で仕事がないときは、「安くてもいいから継続して仕事があるだけでもありがたい」という思いで付き合いをするか、まぁそこはケースバイケースだと思います。

    勤めていた会社からの受注

    これは契約形態によってはできない会社もあるかもしれませんが、以前勤めていた会社から仕事をもらっているフリーランスは少なくありません。僕もその一人です。

    最初のほうで言った、「準備期間で会社に勤める」ということの副作用でもありますよね。しっかりと会社に貢献し、会社からの信用もあれば、普通に仕事をくれます。

    勤めていた会社は当然制作会社なので、当然クオリティも単価も高い仕事ができますし、今まで一緒に働いてきた仲間と仕事をするので、精神的にもだいぶリラックスして仕事ができます。僕は、何か他の案件とバッティングしたときは、よほど詰まってない限りは前いた会社からの仕事を優先することにしています😜

    もちろん既に仕事を請けているものを断るわけはないので、部分的に外注にまわしたりして調整するんですけどね。

    おわり

    今回は、フリーランスとして最初に目指す「安定」のために必要な500万をターゲットに、どうすれば達成できるかを紹介しました。

    問題はここからで、受託で稼ぐには限界があります。なぜなら、時間は有限ではないから。いくら単価を高くしたところで働ける時間は限られてますので、そうなると収入には必然的に超えられない壁が出現します。そして、受託はしんどいから。次から次へと飛んでくるいろんな種類の制作要望をいつまでも万全な状態で提供する気力も技術力もキープできる気がしないです。ほんとに。

    この壁を打ち破るためには、受託以外のことに目を向け、収入源を増やす必要があります。それをやるにももちろん時間が必要なので、

    受託の単価を上げ短い時間で最低限の収入を確保しつつ、余った時間で受託以外の収入について土台を作っていく

    これをやらないと、フリーランスはいずれ息絶えます。

    https://meshikui.com/2018/08/10/612/

     

    それでは、良いフリーランスライフを。

  • nginx+php-fpmでphpのソースがそのまま表示されてしまうとき確認すること

    nginx+php-fpmでphpのソースがそのまま表示されてしまうとき確認すること

    nginx+php-fpmで、WordPress環境を作る必要があったけど、何度ブラウザでアクセスしても

    <?php phpinfo(); ?>

    がそのまま表示されてしまう。

    いったいどういうことなのか、ググっても海外ですらいい解決法の情報はない。そもそもnginxで検索してるのにapacheの話ばっかり出てくる。もう土下座するしかないと諦めていたそのころ…しょーーーもない原因が判明したのであった。

    みんなが同じ原因で10時間も悩まないように、ここにその原因を備忘録として残しておきます。

    それは、locationの優先順位でした。




    問題のnginx.conf

    listen 80;
    client_max_body_size 2G;
    server_name xxx.xxx.xxx.xxx;
    keepalive_timeout 5;
    root /var/www/wp;
    
    location ^~ / {
      index index.php index.html;
      try_files $uri $uri/ /index.php?$args;
      include /etc/nginx/mime.types;
    }
    
    location ~ \.php$ {
      fastcgi_pass unix:/var/run/php-fpm/www.sock;
      fastcgi_index index.php;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    こちらが問題のソース。

    結論からいうと、7行目を

    location  /

    に直したら正常に動作するようになりました。

    原因は?

    原因は、正規表現の記述ミス

    locationの正規表現は、以下のような種類があります。

    プレフィックス 説明
    なし 前方一致
    ^~ 前方一致。一致したら、正規表現の条件を評価しない。
    = 完全一致。パスが等しい場合。
    ~ 正規表現(大文字・小文字を区別する)
    ~* 正規表現(大文字・小文字を区別しない)

    locationにプレフィックスをつけた場合、設定同士で優先順位が発生します。

    /var/www/wp/index.phpというロケーションにアクセスした場合、まずindex.phpをphpとしてnginxで動作させたいので、本当は”location ~ \.php$”にある設定を最優先しなきゃいけないのに、それより前の”location ^~ /”の設定を読んでしまった時点で評価が終わるため、拡張子phpに対する設定が無視されていた

    ずっと必死にphp-fpmとnginxの通信ができていないんじゃないかと予測して調査していましたが、そもそもここの設定部分が無視されているので、何をやっても何も起きていなかったんですね。エラーも出ません。

    いやー怖かった…

    みんなも凡ミスには気をつけようね。

  • WordPress カスタム投稿ごとにfeedの内容を出し分ける

    WordPress カスタム投稿ごとにfeedの内容を出し分ける

    クラ「WordPressのfeedをカスタマイズしてほしいです。しかもカスタム投稿ごとに内容を変えて。」

    ぼく「できらぁ!!」

    というわけでやってみました。案外簡単でした。




    デフォルトのfeedを無効にする

    まず、ややこしいのでWordPressデフォルトのfeedを無効にしておきましょう。functions.phpに以下記述

    remove_filter('do_feed_rdf', 'do_feed_rdf', 10);
    remove_filter('do_feed_rss', 'do_feed_rss', 10);
    remove_filter('do_feed_rss2', 'do_feed_rss2', 10);
    remove_filter('do_feed_atom', 'do_feed_atom', 10);

    feedのテンプレートをコピー

    自分でfeedのphpを書くのは非常にめんどうなので、WordPress本体のものをコピーして使っちゃいましょう。ちなみに、今回コメントのfeedは無視することにします。

    “wp-includes”の中に以下4つのfeed用テンプレートがあるので、コピーしてテーマの中に持ってきます。

    • feed-atom.php
    • feed-rdf.php
    • feed-rss
    • feed-rss2.php

    僕は、テーマの中に”feed”というディレクトリを作り格納しました。

    新テンプレートを読み込むようにする

    上でテーマ内に持ってきたfeedテンプレートを、WordPressのfeedとして使うようにします。functions.phpに以下記述

    function custom_feed_rdf() {
      $template_file = '/feed/feed-rdf.php';
      $template_file = ( file_exists( get_stylesheet_directory() . $template_file )
          ? get_stylesheet_directory()
          : ABSPATH . WPINC
          ) . $template_file;
      load_template( $template_file );
    }
    add_action('do_feed_rdf', 'custom_feed_rdf', 10, 1);
    
    function custom_feed_rss() {
      $template_file = '/feed/feed-rss.php';
      $template_file = ( file_exists( get_stylesheet_directory() . $template_file )
          ? get_stylesheet_directory()
          : ABSPATH . WPINC
          ) . $template_file;
      load_template( $template_file );
    }
    add_action('do_feed_rss', 'custom_feed_rss', 10, 1);
    
    function custom_feed_rss2( $for_comments ) {
      $template_file = '/feed/feed-rss2' . ( $for_comments ? '-comments' : '' ) . '.php';
      $template_file = ( file_exists( get_stylesheet_directory() . $template_file )
          ? get_stylesheet_directory()
          : ABSPATH . WPINC
          ) . $template_file;
      load_template( $template_file );
    }
    add_action('do_feed_rss2', 'custom_feed_rss2', 10, 1);
    
    function custom_feed_atom( $for_comments ) {
      $template_file = '/feed/feed-atom' . ( $for_comments ? '-comments' : '' ) . '.php';
      $template_file = ( file_exists( get_stylesheet_directory() . $template_file )
          ? get_stylesheet_directory()
          : ABSPATH . WPINC
          ) . $template_file;
      load_template( $template_file );
    }
    add_action('do_feed_atom', 'custom_feed_atom', 10, 1);

    do_feed_atom()あたりをWordPress Codexでさらっと見ておくとわかりやすいです。



    feedテンプレートをカスタマイズ

    これでようやくカスタマイズの準備が整いました。さっそくカスタマイズ…する前に、もうちょっと事前知識を入れておきましょう。

    投稿タイプごとにfeedを表示させるには?

    例えば、通常の投稿のfeedであれば、”http://hogehoge.com/feed/”というように、ホームURLの末尾に”/feed/”をつければ表示されます。

    では、カスタム投稿”shop”の場合はどうかというと、

    “http://hogehoge.com/feed?post_type=shop”

    というように、”?post_type=[カスタム投稿名]”をパラメータとしてつけることで表示できます。

    ということはすなわち、テンプレートに”post_type”というパラメータが渡っていて、それが変数として使われていると推測されます。

    そしてWordPressさんのことだから、変数名はきっと”$post_type”だろうと思ってやってみたところ、ドンピシャでした。よかったー、ここわかんなかったらけっこう苦労してたかも。

    というわけでカスタマイズ開始

    一番簡単な”feed-rss.php”を例にします。デフォルトまんまで開くとこんな感じ

    <?php
    /**
     * RSS 0.92 Feed Template for displaying RSS 0.92 Posts feed.
     *
     * @package WordPress
     */
    
    header('Content-Type: ' . feed_content_type('rss') . '; charset=' . get_option('blog_charset'), true);
    $more = 1;
    
    echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>
    <rss version="0.92">
    <channel>
    	<title><?php wp_title_rss(); ?></title>
    	<link><?php bloginfo_rss('url') ?></link>
    	<description><?php bloginfo_rss('description') ?></description>
    	<lastBuildDate><?php
    		$date = get_lastpostmodified( 'GMT' );
    		echo $date ? mysql2date( 'D, d M Y H:i:s +0000', $date ) : date( 'D, d M Y H:i:s +0000' );
    	?></lastBuildDate>
    	<docs>http://backend.userland.com/rss092</docs>
    	<language><?php bloginfo_rss( 'language' ); ?></language>
    
    	<?php
    	/**
    	 * Fires at the end of the RSS Feed Header.
    	 *
    	 * @since 2.0.0
    	 */
    	do_action( 'rss_head' );
    	?>
    
    <?php while (have_posts()) : the_post(); ?>
    	<item>
    		<title><?php the_title_rss() ?></title>
    		<description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
    		<link><?php the_permalink_rss() ?></link>
    		<?php
    		/**
    		 * Fires at the end of each RSS feed item.
    		 *
    		 * @since 2.0.0
    		 */
    		do_action( 'rss_item' );
    		?>
    	</item>
    <?php endwhile; ?>
    </channel>
    </rss>
    

    なんのことはない、普段よく触るテンプレートとだいたい一緒です。

    実際にfeedをブラウザを表示させ、どの関数が何を出力しているのか見ながらやればけっこう簡単に理解できます。

    そして、33行目を見てください。そう、これ…あれですよね!普通に記事をループさせてるだけです!

    記事をループしているので、いつも通り$postとかも使えちゃいます。

    なので、カスタムフィールドもあっさり取得できます。以下は例えばAdvanced Custom Fieldsで取得できる値。

    $link = get_field(‘acf_link’, $post->ID );

    “$post”さえあればいろんな値が取得できます。

    で、カスタム投稿タイプは?

    肝心のそこですが、例えば

    “http://hogehoge.com/feed?post_type=shop”

    で開かれたfeedには、$post_type という変数に”shop”が格納されています。ありがたいですね。

    じゃああとは、$post_typeに入っている値によって場合分けしてやればOKです。

    <?php
    /**
     * RSS 0.92 Feed Template for displaying RSS 0.92 Posts feed.
     *
     * @package WordPress
     */
    
    header('Content-Type: ' . feed_content_type('rss') . '; charset=' . get_option('blog_charset'), true);
    $more = 1;
    
    echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>
    <rss version="0.92">
    <channel>
    	<title><?php wp_title_rss(); ?></title>
    	<link><?php bloginfo_rss('url') ?></link>
    	<description><?php bloginfo_rss('description') ?></description>
    	<lastBuildDate><?php
    		$date = get_lastpostmodified( 'GMT' );
    		echo $date ? mysql2date( 'D, d M Y H:i:s +0000', $date ) : date( 'D, d M Y H:i:s +0000' );
    	?></lastBuildDate>
    	<docs>http://backend.userland.com/rss092</docs>
    	<language><?php bloginfo_rss( 'language' ); ?></language>
    
    	<?php
    	/**
    	 * Fires at the end of the RSS Feed Header.
    	 *
    	 * @since 2.0.0
    	 */
    	do_action( 'rss_head' );
    	?>
    <?php if( $post_type == 'shop' ): ?>
    <?php while (have_posts()) : the_post(); ?>
    <?php $thumb = get_field('acf_thumb', $post->ID ); ?>
    	<item>
    		<title><?php the_title_rss() ?></title>
    		<?php if( $post->post_content ): ?>
    		<description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
    <?php endif; ?>
    <?php if($thumb): ?>
    		<link><?php the_permalink_rss() ?></link>
    <?php else: ?>
    <link><?php echo home_url('/'); ?></link>
    <?php endif; ?>
    		<?php
    		/**
    		 * Fires at the end of each RSS feed item.
    		 *
    		 * @since 2.0.0
    		 */
    		do_action( 'rss_item' );
    		?>
    	</item>
    <?php endwhile; ?>
    <?php else: ?>
    <?php while (have_posts()) : the_post(); ?>
    <?php $link = get_field('acf_link', $post->ID ); ?>
    	<item>
    		<title><?php the_title_rss() ?></title>
    		<?php if( $link ): ?>
    		<link><?php $link; ?></link>
    <?php else: ?>
    <link><?php echo home_url('/') ?></link>
    <?php endif; ?>
    		<?php
    		/**
    		 * Fires at the end of each RSS feed item.
    		 *
    		 * @since 2.0.0
    		 */
    		do_action( 'rss_item' );
    		?>
    	</item>
    <?php endwhile; ?>
    <?php endif; ?>
    </channel>
    </rss>
    

    これでよし。

     

    以上、現場からでした。

  • WordPress 特定のカスタムフィールドに値がある記事だけで「前へ」「次へ」を実装

    WordPress 特定のカスタムフィールドに値がある記事だけで「前へ」「次へ」を実装

    「このカスタムフィールドに値がある記事だけで『前の記事へ』『次の記事へ』のページ送りを実装してください」と言われたけど、思ったより大変だったのでメモ。

    通常、詳細記事のページネーションは”previous_post_link()”と”next_post_link()”を使えば簡単に実装できるんだけど、この関数は残念ながらカスタムフィールドの有無の判定とかはできないので、がんばってphpを書いたのであった。




    functions.phpに以下を記述

    function get_custom_pagenation() {
      global $post;
      $html = '';
      $current_id = $post->ID; //現在の記事のID
      $array_has_thumb = array();
    
      // カスタムフィールドに値がある記事を全部出して、"$array_has_thumb"にIDを格納
      $wp_query = new WP_Query();
      $param = array(
        'posts_per_page' => '-1',
        'post_type' => 'post',
        'meta_key' => 'hoge',
        'meta_value' => false,
        'meta_compare' => '!='
      );
      $wp_query -> query( $param );
    
      if( $wp_query -> have_posts() ){
        while( $wp_query -> have_posts() ) {
          $wp_query -> the_post();
          $array_has_thumb[] = $post->ID;
        }
      }
      wp_reset_query();
    
      // "$array_has_thumb"から現在の記事IDのキーを取り出しておく
      $current_key = array_keys( $array_has_thumb, $current_id );
    
      // 前の記事のID
      foreach( $array_has_thumb as $data ) {
        if( $data == $current_id ) {
          break;
        }
        $prev_id = $data;
      }
      // 次の記事のID
      foreach( $array_has_thumb as $key => $value ) {
        $next_id = $value;
    
        if( $key > $current_key[0] ) {
          break;
        }
      }
      if( $next_id == $data ) {
        $next_id = NULL;
      }
    
      // IDが取得出来たらその記事のパーマリンクを取得
      if ( $prev_id ) {
        $prev_link = get_permalink( $prev_id );
      }
      if ( $next_id ) {
        $next_link = get_permalink( $next_id );
      }
    
      // 出力部分
      if( $prev_link ) {
        $html .= '<p class="prev"><a href="' .$prev_link. '">前の記事へ</a></p>';
      }
      $html .= '<p class="list"><a href="' .home_url('/'). '">トップへ</a></p>';
      if ( $next_link ) {
        $html .= '<p class="next"><a href="' .$next_link. '">次の記事へ</a></p>';
      }
      return $html;
    }

    だいたいコメントに書いてある通りの処理です。

    要は、

    • まず’hoge’というカスタムフィールドに値がある記事のみループさせ、
    • 配列’$array_has_thumb’に記事IDを格納。
    • その配列から、今の記事IDの前後の記事IDを取得して、
    • 記事IDが取得できていたらページネーションを表示

    という流れです。前後の記事IDを取得する部分はもうちょい綺麗に書けそう…あとは、meta_keyやpost_typeの値を引数で渡してやると汎用性高まりますね。まぁそれは気が向いたら挑戦してみてください。🤗

     

    使うときはテンプレートに

    <?php echo get_custom_pagenation(); ?>

    と書くと表示されます。

     

    現場からは以上です。

  • 制作会社にホームページ制作を依頼するとなぜ高いのか~依頼の仕方にもコツがある

    制作会社にホームページ制作を依頼するとなぜ高いのか~依頼の仕方にもコツがある

    「新規に事業するから、ホームページ作ってもらおうと思って制作会社に電話して料金聞いてみたけど、高すぎて無理…自分で作るか…」

    そして知識もないのに自分で作った結果、明らかに素人が作った見るに堪えないホームページになってしまい、結局ホームページがほとんど機能しないまま後でプロに頼むことになる…そんなパターンを僕は何件も見てきました。

    僕は制作会社に技術責任者として勤めていたので、制作の見積もりをいつも作っていました。今もフリーランスで制作をやっていますので、見積もりを作ります。ただ、高いですよね…わかります。でも、高いのには理由があるんです。

    今回は、制作側の立場からなぜ制作会社にホームページ制作を頼むと高いのかという理由を説明するとともに、できるだけ安く済ませる方法を紹介します。だから、どうか知識もなく自分で無料で作ろうとしないでください




    高額の理由は、”フルオーダー”にあり

    なぜ制作会社に頼むとそんなに高いんでしょうか。安くても30万とか、一般的には50~100万くらいかかりますよね。

    その理由は、フルオーダーでゼロからサイトを作り上げることを前提としているからです。

    ゼロから作るとなると、そこには様々な工数が発生します。例えば以下のような感じ。

    • ディレクション
    • コピーライティング
    • 撮影、もしくは画像素材の購入
    • デザイン
    • コーディング
    • システム構築
    • サーバー、ドメインの取得・管理

    何を言っているのかわからないと思うので、それぞれどのようなものかざっくり解説します。

    ディレクション

    クライアントからヒアリングを行いサイトのデザインや構成を考えたり、スケジュールやタスクをスタッフに割り振ったりする、いわゆる「監督」のようなものです。

    ヒアリングではホームページを作る目的や背景、そして要望を聞きだし、最適なサイト構成を導き出します。また、スタッフのスケジュールや能力を把握し無理のない納期を設定し、関わる全ての人間と連絡をとりながら進行を管理します。知らない人からは「何この項目いらんやろ」と思われがちな部分ですが、実はけっこう大変なんです。

    コピーライティング

    ホームページに載せる文章やキャッチコピーなどを考える工程です。どのページにどんな情報を載せるかというのはディレクションの段階でだいたい決まっていますが、この段階でもっと詳しく情報を整理し、ワイヤーフレームを作り、校正も行っていきます。

    撮影

    場合によっては、カメラマンを連れてクライアントの職場に訪れ商品や人物、内観・外観などの撮影をします。人を使いますので、もちろんお金がかかります。

    撮影なしで写真素材でいいパターンもありますが、フリー素材とか正直制作ではあんまり使わないと思うので、基本は有料素材サイトから高品質な画像を購入して使います

    デザイン

    いよいよデザインです。ここがやっぱりかなり工数かかりますね。

    ワイヤーフレームからデザインをおこし、プロの素敵なデザイナー様たちが抜群のセンスでブラッシュアップを行っていきます。ここではクライアントとやり取りをしながら、希望のデザインに近づけるようがんばる部分なので、かなり時間がかかる想定となっています。

    コーディング

    コーディングはデザインモックアップをブラウザで見られるようにするよう、html,cssをゴリゴリ書いていきます。

    この段階では、見た目や仕様はほとんど決まっているためデザインよりかは工数少な目の場合が多いと思いますが、それでもトップページをゼロから作るとなると半日くらいは余裕でかかりますので、うーん高いなーという感じになると思います。

    ただし、ここでjavascriptをめっちゃ書かないといけない場合(アニメーションとか、サイトの動きが凝ってる)、実装にすごい時間がかかりますので恐ろしい値段になります。怖いですね。

    システム構築

    お問い合わせや予約フォームであったり、CMS(コンテンツマネジメントシステム)の組み込みであったり、SNSとの連携であったり、ホームページに何か機能をつける場合に発生します。

    通常のホームページであれば、今はphpという言語を使うことが多いと思います。これはhtmlやcssコーディングとはまた違ったもので、構築に時間がかかります。

    サーバー、ドメインの取得・管理

    制作会社でゼロからホームページを作る場合、レンタルサーバーとドメインを契約し、制作会社で管理をする場合が多いと思います。

    サイトのリニューアルを頼まれたときは、「どこでこのレンタルサーバーの情報を手に入れて使っとんやろか…」と思うレベルの謎の低スペックサーバーを使っていることがけっこうあって我々エンジニアは泣きそうになります。

    どうでしょうか。フルオーダーでの制作はけっこういろんなことをしているのがお分かりいただけたかと思います。

    これに対し、一般的には「人日」という計算方法で見積もりが出されます。例えば、一人が一日かけて作業してようやく完了する工数は「1人日」です。そして、1人日はだいたい4~6万くらいすることが多いと思います。

    つまり、4日かかる作業があるとしたら単純に4倍になる(=20万くらい)ということです。やばい。

    これが、制作会社に頼むと高くなる理由です。「作業した時間を売る」という見積もり方法が一般的なので、フルオーダーだとすごいことになるというわけですね。



    制作会社に安く頼む方法はあるのか?

    あります。

    フルオーダーだから高いということは、つまりフルオーダーじゃなければ金額が抑えられるということです。

    例えば以下のような方法で、工数を減らすことができます。

    テキストや素材を提供する

    「載せる文章や使う写真はこっちで考えて渡します!」というパターンですね。

    そうすれば制作会社側は、校正や写真の加工は必要になりますが、大幅に工数を削減できます。ただし、「めっちゃ加工しないと使えない写真をどうしても使ってほしいという無茶振り」をすると、もしかしたら追加費用を請求されるかもしれないです。

    WordPressのテンプレートを使用する

    これが一番工数削減効果が高いです。見積りを頼むときに、「WordPressテーマを使って安くしたいんですけど…」と言ってみましょう。もしかすると制作会社によってはできないと言われることもあるかもしれませんが、できる会社は少なくないでしょう。僕だったら喜んでお請けします。

    WordPressとは、CMS(コンテンツマネジメントシステム)と呼ばれるソフトウェアの一つで、世界中のホームページで圧倒的に使われています。

    WordPressのテンプレートを使えば、例えば以下のようなサイトが簡単に作れてしまいます。

    TCDテーマ「Agenda」

    TCDテーマ「Avalon」

    すごい。

    もはやサイトの構成やデザイン、コーディング、システム構築が完成されていますので、工数を大幅に削ることができます。

    実はこういったWordPressテーマは、コーディングの知識がなくても、管理画面から画像や文章を設定してレイアウトやコンテンツを編集することができるので、自分でプロ並みのホームページを作ることも可能です。

    ただ、それでもやはりWordPressを理解し構築するのは時間がかかりますし、どんなテーマがいいのかイマイチわかりづらいと思いますので、ホームページ制作に精通しているプロに任せたほうが手っ取り早く見栄えも良いサイトになるのは間違いないです。

    最初は必要なページのみ作り、徐々にコンテンツを増やしていく

    予算がない最初の段階でホームページを完璧に作り込もうとせず、とりあえず最低限機能するホームページを作っておき、ホームページから集客しながら事業を拡大させるとともに、徐々にコンテンツを追加していく、といった方法もかなり有効です。

    このパターンで見積もりをお願いするときは、コンテンツを追加するときの見積もりも一緒に頼んでおくといいでしょう。



    おわり

    引越しや家を建てるときと同じで、何にいったいそんなにお金がかかるのかを少しでも理解しておくと、なんとか安くする方法はないかと相談しながら進めることができます。

    そのうえで、いろんな制作会社から見積もりをもらうのもありですね。会社によって全然値段の付け方が違ったりするので、少なくとも2社には見積もってもらうといいと思います。

    ちなみにですが、見積もりを頼むときは電話よりメールのほうがいいですよ。本記事で書いたように制作にはいろんな工程があり意外と複雑なので、すぐに正確な見積もりを出せない場合が多いんですね。

    なので、「新規にホームページ作りたいんだけど、だいたいでいいから今すぐ料金教えてくれん?」といきなり電話しても、制作側としてはまったくどんなものを作りたいかわからないので「うーん…制作の内容によってかなり変わってきますが、最低でも50万くらいは見ておいた方がいいと思います…」と言うしかなくなってしまいます。

    メールで、もしくは直接会って詳しい話を聞きながら、相談していくのがベストです。

    ではでは、良いホームページを作りましょう!

  • WordPress 親カテゴリーを選択できないようにする2018

    WordPress 親カテゴリーを選択できないようにする2018

    WordPressの投稿画面でカテゴリーを選択するとき、子カテゴリーを持つ親カテゴリーは選択できないようにする。

    調べたら何件か情報があったけど、どれも若干古くて動かなかったりしたのでWP最新版+php7でも動くように修正しました。




    functions.phpに以下を記述(コピペでOK)

    <?php
    require_once(ABSPATH . '/wp-admin/includes/template.php');
    class Nocheck_Category_Checklist extends Walker_Category_Checklist {
    
      function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
        extract($args);
        if ( empty( $taxonomy ) )
          $taxonomy = 'category';
    
        if ( $taxonomy == 'category' )
          $name = 'post_category';
        else
          $name = 'tax_input['.$taxonomy.']';
    
        $class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : '';
        $cat_child = get_term_children( $category->term_id, $taxonomy );
    
        if( !empty( $cat_child ) ) {
          $output .= "\n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="'.$name.'[]" id="in-'.$taxonomy.'-' . $category->term_id . '"' . checked( in_array( $category->term_id, $selected_cats ), true, false ) . disabled( empty( $args['disabled'] ), true, false ) . ' /> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>';
        } else {
          $output .= "\n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="'.$name.'[]" id="in-'.$taxonomy.'-' . $category->term_id . '"' . checked( in_array( $category->term_id, $selected_cats ), true, false ) . disabled( empty( $args['disabled'] ), false, false ) . ' /> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>';
        }
      }
    
    }
    
    function wp_category_terms_checklist_no_top( $args, $post_id = null ) {
      $args['checked_ontop'] = false;
      $args['walker'] = new Nocheck_Category_Checklist();
      return $args;
    }
    add_action( 'wp_terms_checklist_args', 'wp_category_terms_checklist_no_top' );

     

    これでよし。

    古いコードで動かなかった原因は、phpのバージョンによる”extends”の仕様変更(引数のデフォルト値が同じじゃないとだめ)と、WPのバージョンに伴い”get_category_children()”という関数が使えなくなっていたからでした。

    このコードも今は動いていますが、そのうち動かなくなる日が来るかもですね!

     

    現場からは以上です。

  • 独立4年目にして感じる、フリーランスのメリットとデメリット

    独立4年目にして感じる、フリーランスのメリットとデメリット

    「フリーランスは会社員より優れている」

    「フリーランスに憧れている」

    そんな声をよく耳にしますが、果たして本当にそう言い切れるのでしょうか?

    僕は2017年4月に、3年勤めていた会社を辞めてフリーランスになり、今年で4年目になりますが、フリーランスをやっていて会社員と比べて感じたメリットとデメリットを書いてみたいと思います。




    フリーランスのメリット

    フリーランスのメリットは、なんと言っても「自由」。その一言に尽きるんじゃないかと思います。具体的に得られる自由は以下の3つの自由です。

    時間を自由に使える

    朝何時に起きようが、夜何時に寝ようが、何時に何曜日に仕事してようが、納期に間に合ってちゃんとクライアントと連絡がとれていれば何の問題もありません。

    収入と相談し、自分で仕事時間を管理することができます。

    やる気が出ないときは後回しにしてもいいし、なんかもういやだなと思ったらいきなり観光地とか行って気分をリフレッシュしてもいいです。納期に遅れないようスケジュールはきっちり把握しておく必要はありますが、スケジュール管理も自由なので、あんま仕事したくないなーと思ったら緩めにすることもできる。なんてこった。

    また、仕事中にツイッター見るのも自由です。

    仕事を自由に選べる

    やりたくない仕事、できない仕事は「専門外なのでできない」とはっきり言えば、やらなくて済みます。というか、それが当たり前だと思うんですけどね…会社員だと、上からGOが出ればやらざるを得ないことが多いと思いますが、フリーランスの場合は自分のことは自分で決められますので、専門外の仕事をやる必要はありません。

    むしろ、苦手な仕事はやらないほうがいいです。質も落ちるし、しんどいし、稼げないしでいいことはまったくないです。

    更に、メインとなる仕事以外にも、ブログ書いたりサービス作ったり、自分でやりたい仕事を自由に選ぶことができます。会社も副業可能のところはあると思いますが、さすがに会社での仕事中に他の仕事できませんからね。フリーランスの場合は副業というより、いろんな仕事が好きなようにできるといったイメージです。

    なんならカフェとか経営してみたいです。

    人を自由に選べる

    会社員であれば、一緒に仕事をする人やクライアントを選ぶことは基本的にはできません。嫌な人とも仕事しなきゃいけないし、腹立つクライアントでも親切丁寧に接する必要があります。残念な上司にうんざりしてる人もよく見かけます。

    フリーランスの場合は、「あっこの人無理だわ…生理的に無理」って人がいたら(僕は出会ったことないですがw)、「その人とは仕事をしない」という選択をすることができます。むしろいい人に囲まれていたほうが、いい仕事が入りやすい気がします。

    以前、とある企業の社長が「自分の好きな客しか相手しない。そうすれば嫌な客は寄ってこないから会社が綺麗だし、良い客ばかり入ってくるようになる」と言ってるのを聞いてマジかすげぇ考えやなと思ってた頃がありますが、これは確かにその通りなのかもしれません。

     

    以上が、フリーランスが得られる「3つの自由」です。ストレスフリーですよね。僕は何かに縛られるのが嫌いなので、非常に楽しいです。ただし、これらの自由は「生活ができるほどの収入がある」ことが前提で成り立つことを忘れないでください。



    フリーランスのデメリット

    フリーランスのデメリットは、ほぼ「金銭面」にたどり着くんじゃないかと思います。そしてもう一つは、「孤独」です。

    「仕事がない」=「収入がない」

    当然ですが、仕事をしてお金を稼がないと、生きていけません。中には海外とかで月5万円で生活しているという方もいるようですが、そんなことができるのは稀な人間で、ほとんどの普通の人間は日本で一ヶ月にけっこうな金額を使いながら生きていくしかないです。

    会社員の場合は、会社でちゃんと仕事をしていれば安定して給料をもらえますし、会社自体に仕事がなくて何かよくわからない作業ばっかりしている期間があったとしても給料は一定で入ります。(まともじゃない会社は一旦置いときましょう。例外です。)

    ちゃんと自分で考え、仕事を取ることができて、そして事業を成長させていく向上心がなければ、フリーランスとして稼ぎ続けるのは難しいでしょう。クライアントを満足させる実力さえあれば、継続して仕事をもらえる可能性が高いので、初期のころはだいぶ安定しますが、それでもいつまでも同じことをやっていて稼ぎ続けることができるという保証は皆無です。

    それに、継続的に受託案件をいただいているとしてもやはり「仕事がない時期」ってのはどうしてもでてきます。クライアントも常に回せる仕事があるわけじゃないですしね。さらに、納期の関係で支払いが1ヶ月先になったりなんてのは割とよくあります。僕も今まで「ほとんど収入がない月」というのを3回ほど経験していますが、けっこうきついです…胃にきますねw

    会社員はボーナスや昇給があっていいなぁ!

    ちなみにフリーランスのほうが会社員より稼げると言ってる人をたまに見かけますが、全然そんなことないですよ。フリーランスの約半数が、年収200万に満たないと言われています。

    ただ給料と違って上限がなく、そしていろんなことに挑戦する時間があるので、稼ぐチャンスはあるというだけですね。けっこう勘違いされているポイントだと思います。

    仲間がいない

    これは「フリーランス仲間がいない」という話ではないです。フリーランス仲間を増やしたいだけであれば、イベントやセミナーに参加して交流していればなんとなく増えていきますので、デメリットとは言えません。

    フリーランスへ外注してみるのもいいですね。いいフリーランスだなと思ったら、継続して一緒に仕事しようとなります。僕も徐々にですが、フリーランス仲間と呼べる人が増えてきました。

    ただ、会社員であれば会社に行けば会社仲間がいます。毎日会いますし、社内での飲み会やイベントで賑やかに楽しんだりできます。気軽に人と話せる、人と触れ合えるっていいですよね…(遠い目)

    それだけでなく、例えば急に仕事を休まなきゃいけなくなったときや、どうにも自分の仕事があふれてしまったとき、会社であれば簡単に人に任せることができます。経理であれば経理担当がいますし、それぞれみんな得意分野があるので、自分にできないことをお願いすることも容易です。

    フリーランスの場合、経理や経営も自分でやらなければいけないし、自分にできない仕事はできません。もしどうしてもやらなきゃいけない場合は、お金を払って外注ということになるでしょう。

    フリーランスで集まってチームを組む「チームランサー」という言葉を聞いたことがありますが、今のところまだ成功例を知りません…

    「いやそれ会社でいいじゃん」と思います。会社のほうが信頼もあるのでクライアントも発注しやすいですし。小回りが利くことが強みだけどお互い自分の好きなことがしたいフリーランスが固まってしまっても成功する気がしないです。

    「フリーランスと企業のメリットを掛け合わせた」と言われていますが、逆にお互いのメリットをつぶし合っているようにも見えます。

    これはただの僕の感想なので、皆様の意見お待ちしております!



    おわり

    本記事では僕の感じたフリーランスを会社員と比べてのメリットとデメリットを挙げてきましたが、そこに「フリーランスと会社員どちらが優れているのか」という答えを見出すとするならば、正直「人による」としか言えないと思います。

    フリーランスは確かに自由ですが、その分大変です。何かを得るということは何かを失うことなんだと思います。

    フリーランスになってみたのはいいけど、やっぱり会社員に戻るという人はけっこういますからね。

     

    ただ、僕はフリーランスが大好きです!会社員には戻れないですね。僕のように「プライドが高くて組織に縛られるのが嫌」な一匹狼タイプの人にはフリーランスは向いていると思います。プライドが高いと必然的に向上心もありますので、常に上を目指していけます。

     

    それでは、グッドラック!

  • WordPress 投稿内やウィジェットでphpファイルを読み込めるようにする方法

    WordPress 投稿内やウィジェットでphpファイルを読み込めるようにする方法

    WordPressでは、テンプレートファイルに以下のように書くことで、他のphpファイルを読み込むことができる。

    例えばテーマ内の”hoge.php”というファイルを読み込みたかったら、

    get_template_part('hoge');

    と書けばOK。しかしこれはphpなので、投稿とかでは使えません。固定ページの途中でループを使いたいんじゃ…といったことがたまにあると思います。




    そこで今回はこれを、投稿内やウィジェットでも読み込めるようにします。

    基本的に、投稿やテキストウィジェット内でphpを使えるようになるプラグイン”PHP Execution”はセキュリティ上使わないほうがいいので、ショートコードを使って読み込むことにする。

     

    functions.phpに以下を記述。

    <?php
    // テンプレート呼び出し用ショートコード
    function my_php_Include( $params = array() ) {
      extract( shortcode_atts(array('file' => 'default'), $params ) );
      ob_start();
      get_template_part( $file );
      return ob_get_clean();
     }
     add_shortcode('myphp','my_php_Include');

    これで、投稿内で”hoge.php”を読み込みたい場合は

    [myphp file='hoge']

    とショートコードを書けばOK。

    “hoge”の部分を変えれば他のファイルも読み込めます。

     

    ウィジェットの「テキスト」でも使いたい場合は、ウィジェットでショートコードを使えるようになる以下のコードをfunctions.phpに追加する。

    add_filter('widget_text', 'do_shortcode' ); //ウィジェットでショートコードを使う

    これでテキストウィジェットでもショートコードが使えます。

     

    現場からは以上です。

  • ちゃんとしたフリーランスになるために準備した5つのこと

    ちゃんとしたフリーランスになるために準備した5つのこと

    今すぐにでもフリーランスになりたいと思っているみなさん、まぁちょっと待ってください。ちゃんとフリーランスになってから生きていける準備はできてますか?

    フリーランスになること自体は簡単です。役所に開業届を出すだけで誰でもなれます。ただ、問題はその先ですよね。フリーランスとしてちゃんと収入を得て生きていけないと意味がありません。

    今回は僕がフリーランスとして生きていくうえで、ちゃんと準備したこと、そして実際に役に立っていることを紹介したいと思います。




    実は、未経験からフリーランスになろうとしたことがあった

    これは制作会社に勤める前、別の派遣会社を辞めてから約半年くらいの間ですが、「Webデザインって稼げるんやな!やってみよ!」くらいのノリで、完全に未経験の状態からフリーランスWebデザイナーになろうとしたことがありました。

    実際には開業届を出していないのでただのフリーターでしたが、当然仕事をとれるわけがなく、品質もゴミみたいなデザインしかできなかったため何をやってもだめでした。3ヶ月合計で10万円も稼げていません。他にもコンビニのアルバイトをしながらやっていたし、ご飯も残念なものしか食べられなかったため、僕はこの時期にストレスで痔になりました

     

    よく見かけますよね。「未経験からフリーランスになる!」みたいなやつ。

    そんな簡単になれませんから。

    よほどの天才であったり、既に貯金がめっちゃあるならなんとかいけるかもしれませんが、ほぼほぼ無理です。僕は無理でした。貯金がないならやめときましょう。

     

    ここで、僕は一旦フリーランスになることをストップし、「ちゃんと準備して、ちゃんとやろう。」と肛門に誓いました。

    というわけで、失敗を踏まえてフリーランスになるために準備したことを紹介します。それは、以下の5つです。

    • 会社で実務経験を積む
    • 人との信頼関係を結ぶ
    • 自分のホームページを作る
    • 自分の名刺を作る
    • クレジットカードを作る

    会社で実務経験を積む

    どう考えてもこれが一番だいじです。

    Webデザイナーになるため、もちろん独学でデザインの勉強、html,css,あとはWordPressとjQueryもちょっとは触れるようになっていましたが、圧倒的に足りないのが実践向けのスキルです。※もちろん技術も足りません。

    現場にいっても、毎回1からフルスクラッチで組むわけではないです。既存サイトのリニューアルや保守、チームでの制作方法、また、クライアントにとって何が一番大事なのかを導き出すスキルも必要です。

    技術以外では、クライアントとのやりとりや金額・スケジュールの相場、業務効率化ができるサービスの使い方、そして社員として経営に携わることで経営とは何か、どうすれば事業を成長させられるかといったことを学ぶことができます。

    フリーランスというのは、ひとり経営者です。一人で全ての実務をこなし、経営・営業・経理もこなす必要がありますので、実際に会社に勤めて現場に立ってみないととてもじゃないですがまともにやっていけません。

     

    僕の場合は、制作会社の技術責任者という立ち位置を与えられ、まさに会社の幹部みたいな感じで経営に携わってきました。最初入社したときは本当に社員が少なく、僕以外にやる人がいなかったんですよね。。しかも、コーダーも僕含め2人しかいなかったので、入社してからしばらくは毎日がオーバーヒートみたいな感じでしたが、僕にとってはそこで学ぶこと全てが自分のためになるので、辛くても余裕で乗り切りました。

    そして、目論見通り短期間でしっかりと成長できました。

    現場で働くことで、実績も得られる

    会社で制作したものは会社の制作物なので、フリーランスになってからその制作実績を使うことはできませんが、それでも「技術責任者として制作会社で3年間働いていた」という肩書だけでも大きな実績となります。

    「まだ実務経験はありませんが、独学で学び精一杯努力します」という未経験フリーランスと、どっちを採用しますかって話です。

    会社への貢献もだいじ

    後の「信頼関係」とも結びつく話ですが、ただ会社を自分のスキルアップの場だけとして捉えるのは良くないです。経営者側から見ると「こいつは自分の事しか考えてない」ってことになっちゃいますからね。

    会社への貢献とは、もっと言うと「会社の成長への貢献」です。

    例えば、業務の効率化を提案したり、最新の技術を仕入れて技術力を向上したり、新たな収益方法について提案したりといったことですね。

    僕の場合は、Jootoというサービスの使い方をアレンジし、チームでのタスク管理を効率化し、マネジメント力をアップするきっかけを作りました。また、勉強会で学んだことをみんなの前でアウトプットする社内勉強会を定期的に開いて全体的に技術を向上させたり、コーダーとデザイナーを集め、コーディングでややこしいことや、こういう風にデザインしてほしいことを伝えたりしてコーダーとデザイナー間の認識の違いをできるだけなくし、チームワークを向上させワークフローの効率化をアップするなんてこともやってきました。

     

    実際にこういった会社全体のためになることは、フリーランスになってからもそのまま自分のためになることが多いです。良い関係を構築するため、そして自分のためにも、会社に貢献するということは忘れないようにしましょう。

    ただし、貢献したくないようなダメ会社だったらさっさと辞めましょう。逆にそんな会社だったら、フリーランスになった後も付き合いたいと思いませんからね。僕が入社したところは運よく、入社当時は小さくて超多忙ではありましたが(今はけっこう大きく成長したみたいです!)みんな良い人で、離れてもずっと一緒に仕事をしていきたいなと思えるような会社でした。

    人との信頼関係を結ぶ

    これは真面目にやっていればたぶん大丈夫だと思うのですが、会社を辞めてフリーランスになって間もないときにどこから仕事をもらうかというと、やっぱり元の会社からであったり、そのときお付き合いさせていただいたクライアントだったりと、会社員時代に既にできあがっているパイプから入ってくるパターンが多いです。

    僕もフリーランスなりたてのころはそうでした。
    そして、ありがたいことにその脈から口コミで紹介していただき、今でも継続的にお仕事をいただいているクライアントの8割以上が、勤めていた会社のおかげで出会えた方々です。

    社内や周辺で信頼がないと、こうはいかないですよね。「あいつに頼むぐらいだったらその仕事請けんとこ」みたいな感じになるのと、「ちょっと今リソース的にきついけど、この仕事ならあいつに頼んだらなんとかなるやろ」って思われるのとでは天地の差があります。

    だからといって、誰とでも無理して仲良くなる必要はありません。会社員時代に「このクライアントの仕事は請けたくないわ…」ってのは絶対あると思うので、そういうのはもう請けなくていいんですよ。どうせなので好きな人とだけ関わる努力をしましょう。僕の今のクライアントさんはいい人ばかりで、人間関係に対するストレスは一切ありません。



    自分のホームページを作る

    できればフリーランスになる前に、ホームページは作っておきましょう。フリーランスになってからでも遅くないですが、なる前に作っておいたほうが効率はいいです。自分用のメールアドレスも取得できるし、一石二鳥です。

    僕の場合は、作ったもののほぼサイト自体は動作してませんが(このブログがあるので)…それでも、初めてお仕事をさせていただくクライアントさんに対しての名刺代わりにはなります。会社でもだいたいコーポレートサイトありますよね。それと同じです。

    「え?Web系の仕事してる人なのに自分のサイトないの?」って思われないためにも、簡単なものでいいので作っておくことをオススメします。Webデザイナーであれば、ポートフォリオサイトなんかもいいですね。

    自分の名刺を作る

    正直、名刺については最近では必要ないという考えも一般的になっていますね。

    ただ、セミナーやイベントに行って交流したり、人脈を広げるうえで名刺があったほうが話が早くていいと思います。

    名刺には、住所や電話番号なんかをきっちり記載する必要はなく、「自分が何者か」ということがわかればいいです。

    例えば、僕の名刺は、名前と屋号、そしてSNSのアカウントとメールアドレスが記載されています。

    在宅フリーランスの場合自宅が事務所となる場合が多いと思うので、むやみに住所とか書かない方がプライバシー的にもいいと思います。

    また、デザイナーであれば自分の名刺をがんばってデザインすれば「おっこの名刺のデザインかっこいい…センスあるやん!」と思われてお得ですよね。

    クレジットカードを作る


    人によっては大学生の頃にもう作っているという人もいると思いますが、まだの人はフリーランスになる前に絶対1枚は作ってください。

    なぜかというと、フリーランスになって間もないうちは社会的に信用がないため、審査になかなか通らないんですね。ツイッターで、恐ろしいほど稼いでるのに楽天カードの審査に落ちたっていう人がいて戦慄しました。

    会社に勤めていれば、割とカード審査は通りやすいです。枠の上限なんか10万円とかで十分なので、ぜひ会社員のうちに作っておきましょう。

    「いやクレカなんか使わんでも生きていけるやろ」なんて思ってます?絶対無理ですよ。まずサービスに課金できないですよね。クレカでしか支払えないサービスはけっこうあるので、絶対に作っておいてください。また、フリーランスやってると納期の関係とかでどうしても収入がほとんどない月が出てきます。そういったとき、貯金もカードもないとそこに待つのは破滅のみなので、クレカ持ってないなんてあり得ないレベルです。

    ちなみに僕は5枚持ってます(正直こんなには要らないと思います)

    どんなクレカがいいかというと、やっぱり銀行かなと思います。僕が持ってるクレカのうち4枚は、銀行のキャッシュカードと一緒になってるやつです。
    銀行のクレカは支払いも口座からなので楽ですし、楽天カードであればデビットカードなんかも使えて便利なのでオススメです。僕は楽天カードをメインにして費用をやりくりしてます。経理の際にも楽ですからね。ネットバンクだからインターネット上で管理できるのもグッド。

    あとは、車のローンを組んだときに一緒にどうですか?みたいなクレジットカードに申し込みました。これは正直念のためですね。まだ使ってません。だいたい2~3枚あればとりあえず十分なんじゃないかと思います。

    聞いた話によると、既にカードを作っていてちゃんと正常に使っている場合、フリーランスになっても増枠や新規カード契約の審査に通りやすいとのことです。実際僕は学生の頃からカード作って使ってますが、フリーランスになってからもほぼすべての会社で増枠できましたし、車のローンとかも合わせ、審査にも問題なく通ってます。

    おわり

    フリーランスになるためというだけでなく、何事であってもちゃんと準備しておくと土台の安定感が段違いです。

    うまい言葉に踊らされ、準備なしでいきなり飛び込んで痔にならないためにも、しっかりと準備しましょう。準備さえきっちりできていれば、フリーランス超楽しいですよ!

     

    最後に、こんなサービスも使うといいよという記事を紹介して終わります。

    https://meshikui.com/2018/03/13/182/

     

    ではでは、ちゃんと準備して素敵なフリーランスライフをエンジョイしましょう。

  • フォームに全角や日本語を入力すると消えてしまうときに疑うこと

    フォームに全角や日本語を入力すると消えてしまうときに疑うこと

    お問い合わせフォームとかで、フォームに日本語や全角テキストを入力すると、うまくPOSTできずに消えてしまう事案が発生。

    原因は、phpの文字コード設定にありました。




    php.iniの設定を見る

    既にphp.iniがサーバーによって用意されている場合は、php.iniを確認してみましょう。

    php.iniの場所がわからないときは

    現在読み込まれているphp.iniは、phpinfo()によって確認できます。

    info.php等適当なphpファイルを作り、以下のようにコードを書きます

    <?php phpinfo(); ?>

     

    書いたらファイルをFTPでサーバーにアップし、ファイルにアクセス。

    すると、現在利用されているphpの情報が表示されます。これは使う機会が多いので覚えておきましょう

    上の画像が、現在読み込まれているphp.iniです。

    php.iniの場所がわかったら、FTPでphp.iniをダウンロードし、ファイルを開きます。

    下記のような部分があったら修正しましょう

    mbstring.internal_encoding = EUC-JP

    mbstring.internal_encoding = UTF-8

    修正したらアップし、フォームの動作を確認してください。



    別のphp.iniがある場合

    あれれ?サーバーが用意したphp.ini以外にも、ルートディレクトリなんかにもphp.iniがあるぞ?

    という場合が稀にあります。たぶん、WordPressを使うにあたってサーバーのデフォルトのphp.iniじゃ話にならないので、誰かが新たに自前のphp.iniを追加したんでしょうね。また、サーバーによってはもとからここに置いてある場合もあります。いろいろ大人の事情があるんでしょう。

     

    まずはその別php.iniを開いて中身を読んでみて、’mbstring.internal_encoding = UTF-8‘という内容が書かれているにも関わらずエラーが出る場合、なんらかの理由でこのphp.iniが読み込まれていない可能性が高いです。

    前章で説明したphp.iniの場所探しで、この別php.iniが読み込まれていない場合、.htaccessを見てみてください。

    下記のような表記があるでしょうか?あるかもしれませんし、ないかもしれません

    setenv PHPRC /home/xxx.com/html/

    このコードは、別php.iniを読み込むためのコードです。

     

    ない場合は追加しましょう。php.iniが置いてある場所を絶対パスで指定します。

    ある場合は、内容が間違っていないか確認します。

    絶対パスがわからないときは

    適当なphpファイルに下記コードを書き、アップしてアクセス。

    <?php echo __FILE__; ?>

     

    WordPressを使っている場合は要注意

    で、今回なんでこんなエラーが出たかというと、WordPressでパーマリンクを変更した際に.htaccessが上書きされ、php.ini読み込み部分のコードが消えてしまったのが原因です。

    なかなかホラーですよね…

    何かサイト全体、もしくはフォームに影響がありそうな変更があった場合はフォームの動作確認を必ずしましょう。特にコンバージョンに関わる部分にエラーが出るとやばいですからね。。

     

    がんばれWordPressマン!

  • jQuery – アコーディオンを開いたら、他のアコーディオンが閉じるようにする

    jQuery – アコーディオンを開いたら、他のアコーディオンが閉じるようにする

    複数のアコーディオンがあるとき、全部開くとすごいことになるので、1つ開いたら他のアコーディオンは閉じるようにしてほしいというご要望。




    ソースは以下の通り

    var parent = $('dt');
    parent.each(function(){
    	var self = $(this);
    	self.on('click',function(){
    		parent.not(self).next('dd').slideUp(300);
    		self.next('dd').slideToggle(300);
    	});
    });

     

    dtをクリックしたら、その次のddがslideToggleするよというコードですが、クリックしてないdtの次のddは閉じるようにしてやります。

    ポイントは、$(this)を変数’self’に格納して使いやすくしたうえで、‘.not(self)’で「$(this)以外」という指定をしている点。$(this)も変数に格納できるんですね!これに気づけばいろいろ捗りそう。

     

    現場からは以上です。

  • 【簡単】slick.jsで無限ループスライダー

    【簡単】slick.jsで無限ループスライダー

    この記事の方法はちょっと苦しいので、プラグインなしで実装する方法も紹介しています!

    ゆっくり流れる無限ループスライダー(逆方向も)

    ホームページ上にスライドショーを実装するとき、いつもお世話になっているslick.jsで、画像がずっと流れ続ける無限ループスライダーを実装。




    実装

    ソースは以下

    $('#slider').slick({
      slidesToShow: 5,
      centerMode: true,
      arrows: false,
      autoplay: true,
      autoplaySpeed: 0, //待ち時間を0に
      speed: 10000, // スピードをゆっくり
      swipe: false, // 操作による切り替えはさせない
      cssEase: 'linear', // 切り替えイージングを'linear'に
      // 以下、操作後に止まってしまう仕様の対策
      pauseOnFocus: false,
      pauseOnHover: false,
      pauseOnDotsHover: false,
    
      // 以下、レスポンシブ
      responsive: [
        {
          breakpoint: 750,
          settings: {
            slidesToShow: 3,
          }
        }
      ]
    });

    要するに、「常に均等なスピードでゆっくり動いていれば」それっぽい感じになるので、

    ・待ち時間をなくす
    ・スピードを遅くする
    ・イージングを’linear’にする

    といった設定をしてやればOK。

    ちょっとガタつくかなーと思ったら、

    slidesToScroll: 5

    とかで一気に動かしてやると、いい感じになる。

    現場からは以上です。

  • 【超シンプル】デザインが苦手なエンジニアでもできる、配色の決め方

    【超シンプル】デザインが苦手なエンジニアでもできる、配色の決め方

    自分でサイト作ったりサービス作ったりしたいけど、デザインができない。装飾とか無理。イラレ?パス?

    最近はCSSフレームワークが主流になっているから、デザインそこまでがっつりしなくてもサイトやサービスを作れるけど、配色とかどないしよ…赤、黒、白、青くらいしか使えんわ

     

    そんなエンジニアのみなさんでも、配色をいい感じにできる方法を紹介します。エンジニアだけでなく、初心者デザイナーの皆さんにも何かヒントになることがあるかもしれません。

    本記事の概要は以下の通りです。

    1. 配色の基本中の基本を知る
    2. イメージからメインカラーを選ぶ
    3. メインカラーからベース、アクセントカラーを選ぶ

    それではいってみましょう。




    配色の基本

    配色を決める前に、まずは配色は基本的なルールを知っておきましょう。

    3つのカラーの法則

    配色を決める際、基本となるのがこの「3つのカラーの法則」。

    • ベースカラー
    • メインカラー
    • アクセントカラー

    この3つのカラーを、ベース:メイン:アクセント=70:25:5で使用するのが美しいとされています。

    ベースカラー

    サイトやサービスの背景、余白等に用いられる色。部屋でいうと床です。

    メインカラー

    サイトの印象となる色。部屋で言うと家具ですね。ベースカラーの類似色をとるか、全然違う色をとるかの2パターンあります。その色の決め方も後で紹介します。

    ベースが白、黒、灰色等の無彩色の場合は何色でもいけますね。

    アクセントカラー

    サイトのアクセントとなる色で、ボタンやアイコン等に使用されます。部屋で言うとインテリア

    これも基本は、メインカラーとは全然違う色を選びます。ユーザーの目線を誘導する役割がありますので、注目してほしい大事な部分等に使いましょう。

     

    例えば僕のサイトの場合、

    ベースカラー(背景色)…灰色
    メインカラー…黒
    アクセントカラー…青

    といった感じですね。黄色マーカーとか赤線は文章を強調するためのものなので、一旦置いときましょう。別枠です。

    また、おもちゃ屋さんや子供向けサイトのようなめっちゃいろんな色を使うパターンもありますが、非デザイナーには正直厳しいと思いますので、特に理由がない場合は避けましょう。



    メインカラーを決める

    基本の配色ルールがわかったところで、さっそくメインカラーを決めましょう。

    メインカラーはだいたい以下のような方法で決めることができます。

    ロゴと同じ色

    非常によくある手法で、既にロゴがある場合はそのロゴに色を合わせる方法。

    いや、ロゴの色も決まってないし!という場合は、メインカラーを先に決めてロゴを決めるのもあり。

    イメージから選ぶ

    色には、それぞれの色が見る者に与えるイメージを持っています。

    これを利用し、ユーザーにどのようなイメージを持ってほしいか、もしくは自分が制作するサイトに込めたいイメージからカラーを選択します。

    自分のプロフィール用サイトとかなら、パーソナルカラー診断をやってみるのもおもしろいでしょう。

    この方法は、以下のサイトが役に立ちます。大変ありがたいですね。


    カラー配色で迷わない!シーン別配色見本32パターン

    「柔らかなイメージ」「大人の男性的なイメージ」「明るくポップなイメージ」などから色のカテゴリーを選び、その中でも暖色系(赤、橙、黄)にするのか、寒色系(青、緑、紫)にするのかといったように色を絞りましょう。

    ここにセンスは関係ありません。あるのは心理学に基づく確かな効果です。

     

    ベースカラーを決める

    メインカラーが決まったら、そこからベースカラーを決めていきます。

    これにもルールがあり、そして役に立つツールがあります。

    Adobe カラーホイール

    配色のパターンに従って、色を提案してくれるツール。自分で調整してしっくりくる色を選ぶこともできます。左上にカラーハーモニーというセレクトボックスがあるので、そこからどんな色の組み合わせにするのかを決めましょう。

    「探索」でいろんな人の作ったカラーテーマを見ることができますので、眺めてみるのもおもしろいです。

     

    よく使う配色パターンは、以下の3つ。

    似ている色を選ぶ

    メインカラーと似ている色を選ぶことで、サイト全体に統一感を持たせます。基本はこれ。

    カラーハーモニーでいうところの、「類似色」「モノクロマティック」「シェード」といったパターン。

    違う色を選ぶ

    メインカラーと違う色を選ぶことで、コントラストが生まれサイトにメリハリを与えます。

    カラーハーモニーで言うところの、「補色」「トライアド」といったパターン。

    明度が高い色でこれをやると目が疲れる組み合わせが生まれることがありますので、注意しましょう。やや中級者向けかもしれません。

    無彩色を選ぶ

    黒、白、灰色など、何にでも合わせられるベースカラーを選ぶ方法。

    この方法だとテキストが見づらいといったことが起きにくいので、無難。よく使われている方法ですね。



    アクセントカラーを選ぶ

    メインカラー、ベースカラーが決まったら、最後はアクセントカラーです。

    これはなるべくメインカラーから遠いものを選び目立たせる必要がありますので、カラーホイールで「補色」に近い色を選ぶのが鉄板です。

    なんか色がきついなーと思ったら、明度を少し落とすだけでも意外としっくりきます。

    ボタンやアイコン、ちょっとしたアクセントなどに使いましょう。割合としては5%なので、使いすぎに注意。

     

    おわり

    今回は、配色について全然わからんし迷うという人のために、基本に沿って簡単に配色を決定する方法を紹介しました。

    もちろん、ここに書いてある方法以外にもテクニックはありますので、深く調べてみるのもおもしろいです。例えば、「和」な色の組み合わせとか、ハロウィンの色、クリスマスの色等、既にテーマカラーが決まっているものもありますよね。

     

    配色は、もちろんセンスを磨くことも必要ですが、基本は科学や心理学に基づいた色の選び方がちゃんとあるということですね。つくづく実感しますが、デザイナーさんってすごいですよね…デザインの勉強は奥が深すぎる。

    ではでは、良い配色ライフを!

  • Windows10のOpenSSHでconfig使ってSSH接続

    Windows10のOpenSSHでconfig使ってSSH接続

    Windows10に搭載されているOpenSSHを使って、configを読んでSSH接続する方法がやっとわかったので、備忘録として記載。




    ‘config’,’秘密鍵ファイル’,’known_hosts’の3つのファイルが先方から送られてきたものの、それをどうすればいいかわからず四苦八苦した。先方にやり方がわかりませんと聞いてみたけど、先方も「Windowsはちょっとわからないので、がんばって調べてみてください」とのこと…まぁそりゃそうだよね…世間はWindowsエンジニアに厳しい。

    いろいろ調べたところ、どうやら’.ssh’というディレクトリに上記3つのファイルを置いて、普通ならコマンドプロンプトで

    ssh hoge

    と打つだけでSSH接続ができるらしい。というところまではわかった。

    ところが’.ssh’がどこにあるのかがわからなかったレベルで、ようやく置き場所がわかって接続もできたよというお話です。

    OpenSSHの確認

    まずWindows10のOpenSSHが入っているかチェックしましょう。

    ssh -V

    以下のように出れば入ってます

    OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4

    入ってなければインストールしましょう。

    ちなみに、Git付属のOpenSSHを使っている場合は、使用方法がいろいろ違うらしいので、あんまり使わないほうがいいんじゃないですかね…ややこしいです。

     

    configの記述方法と設置場所

    SSH接続する際、configというファイルを作ってそれを読み込むことで接続が簡単になります。configがないといろいろ大変です。

    configの置き場所

    configの置き場所は以下。

    C:\Users\ユーザー名\.ssh

    OpenSSHがインストールされていれば、既にそこに’.ssh’あるはず。
    なければディレクトリを作りましょう。

    このディレクトリに、”config”という名前のファイルを、拡張子なしで作成します。
    ちなみに、秘密鍵(.key)もこのディレクトリに置くのが一般的です。

    configの記述方法

    configの基本的な記述方法は以下のような感じ

    host hoge
    	user hogehoge
    	hostname hogehoge.com
    	port 22
    	identityfile ~/.ssh/hoge.key
    Host 接続名(任意)
    この名前をもとに、「ssh hoge」と入力します。
    HostName ホスト名
    User ログインユーザ名
    port ポート番号
    IdentityFile 秘密鍵へのパス

    また、一つのconfigファイルで複数のssh接続設定ができます。

    host hoge
    	user hogehoge
    	hostname hogehoge.com
    	port 22
    	identityfile ~/.ssh/hoge.key
    
    host fuga
    	user fugafuga
    	hostname fugafuga.com
    	port 22
    	identityfile ~/.ssh/fuga.key

    接続!

    コマンドプロンプトで以下のように入力。

    ssh hoge

    接続できましたでしょうか。

    現場からは以上です。

  • Webエンジニアでもスマホアプリは作れる!そう、Ionicを使えばね。

    Webエンジニアでもスマホアプリは作れる!そう、Ionicを使えばね。

    IT業界に入ってからずっとWeb制作にしか携わっていなかったため、iOSやAndroidのアプリ開発というジャンルを敬遠していました。HTML/CSS、JavaScript、PHPしか知らないので、「アプリ開発とか、よくわからん言語使うんやろ?ハードル高いわー」と思ってました。

    SPA(シングルページアプリケーション)についても思い違いをしていて、なんでわざわざWebアプリ作るのにそんなややこしいことせなあかんのやろとか思ってたんですが、そうじゃないんですね…

    告白します。HTMLでアプリが作れるということを初めて知りました。

    SPAはそのための技術だったんですね。Webアプリケーションを作るだけのためではなかったんです…HTMLでアプリを作れるなんて知らなかったので、先入観が邪魔をしていました。

    これからは、SPA、そしてHTML5アプリについても知見を広げていきます。一気に世界が広がった気分ですね。




    なんで急にそんなことを知ったのか

    僕は今、脱受託に向けてWebサービス開発について勉強をしています。

    完全受託からの脱却~ストック型ビジネスを進めるために必要な方向転換

    Webサービスについていろいろ情報収集をしている中、とある記事で「HTMLでアプリを作れるフレームワーク”Ionic”」の紹介がされていました。

    アプリ開発はハードルが高いと思っていた僕にとって、この情報は

    というほかありませんでした…

    それもそのはず、一般ユーザー向けのWebサービスはブラウザではなくアプリの時代だということはわかっていたのに、Web制作用言語しか知らない僕は、アプリ開発という道を諦めていたのです…

    それが、Ionicを知ったおかげ、というよりHTMLでアプリが作れるという事実を知ったおかげで、可能性がぐんと広がったわけですね。ここから俺の未来は始まるんだというテンションです。

     

    Ionicとは

    ここから先は、Ionicという存在を知り即行で買った以下の本を参考にIonicの基本をまとめます。

    Ionicとは、AngularをベースにしたHTML5アプリ開発用フレームワークで、これ一つでiOS/Androidはもちろん、Webアプリとしてもリリースできます。同時に開発を行えるんですね。

    また、SPA開発パッケージや、PWAも標準でサポートしています。さらに、スマホアプリに変換する機能も搭載されています。

    要するに「いろんな手間が大きく省ける」というわけです。アプリ開発のハードルがかなり下がりますね。



    開発環境の準備(Windows)

    Ionicでアプリ開発を行うため、まずは開発環境の準備を行うため、ソフト・ツールをインストールします。とりあえず必要なのは以下5点。

    • Node.js
    • Ionic CLI
    • Git
    • 実機確認用ツール
    • エディタ

    Node.jsとGitはエンジニアであればインストールされていることが多いと思いますが、インストールされていない場合はこの際にインストールしちゃいましょう。

    Node.js

    Ionicをインストールする前に、Node.jsをインストールします。

    Node.js公式サイト

    インストールできたら、念のため確認します。Node.jsがないと、次のIonic CLIがインストールできません。

    node -v

     

    Ionic CLI

    続いて、Ionicを使うためのIonic CLIをインストールします。

    npm install ionic cordava -g

     

    Git

    こちらも公式サイトからインストール。

    Git公式サイト

    そして確認。

    git --version

     

    実機確認用ツール

    AndroidかiOSかでインストールするツールが違います。

    iOS…Xcode
    Android…Android Studio

    Android Studioのキャプチャ

    いよいよアプリ開発するぞ!って雰囲気になってきましたね~。

    実際に実機でも確認できる

    “Ionic DevApp”というアプリをスマホにインストールしていれば、スマホ実機でも開発中のアプリが簡単に確認できます。

     

    エディタ

    僕はVidual Studio Codeを使っていますが、書籍では「WebStorm」というエディタが紹介されており、気になりました。JavaScriptを使うならこれ!という感じのエディタみたいですが、僕は本業がWeb制作なので…ちょっともったいないかなと思います。そのうち買うのかなーうーん…保留!

    VS Codeを使う場合は、拡張機能「Angular Language Service」をインストールしましょう。

     

    Ionicの便利機能

    Ionicには、HTML5アプリ開発のために多くの便利な機能があります(原文ママ)

    プロジェクト作成が一瞬

    コマンドプロンプトでプロジェクトを作りたいディレクトリに移動

    cd hoge

    そして次のコマンドを打つ

    ionic start

    これだけです!ひぇ~

    面倒な下準備等一切必要なし!

     

    設定も全自動

    プロジェクトのあるディレクトリ内で、以下のコマンドを打つだけ

    ionic serve

    これだけで、webpackというビルドツールが立ち上がり以下の処理が勝手に行われます

    1. 前回ビルドしたファイルが削除される。
    2. 「src/assets」に入れた公開ファイルを「www/assets」にコピー
    3. URLルーティングが有効になる
    4. SCSSとTypeScriptをコンパイルし、1ファイルにまとめる。
    5. 開発用サーバプレビューを起動する。

    うーん至れり尽くせり…

     

    各デバイスごとのデザインプレビューが同時にできる

    サーバプレビューのURLの末尾に”/ionic-lab”を追加すると、Ionic Labというページが立ち上がり、以下のように各ブラウザでの表示が全部確認できます。

    めっちゃええやん…

    各端末向けのUIがデフォルトで最適化されてるってのが高まりますね!

     

    おわり

    今回は僕の夢が一気に広がるきっかけとなったIonicの紹介ということで、いつになくテンション高めでお送りしました。

    これからは、というかもうとっくに「アプリ時代」であって、さらにHTML5アプリが従来のネイティブアプリの市場を上回る勢いらしいので、開発のハードルが低くなったことで可能性が広がりワクワクしますね!

     

    それでは、良いエンジニアライフを!

  • フリーランス2年目の計画~これからは受託以外の時間を作る努力をしていく

    フリーランス2年目の計画~これからは受託以外の時間を作る努力をしていく

    受託制作のお仕事は安定し、最低限の生活費と、思い立った日に日帰り旅行に行けるくらいの贅沢ができる程度には稼げるようになった今日このごろ。

    しかしまだまだ足りません。お金がではなく、努力が。受託は確かに1回の収入が大きいためお金にはなるのですが、いかんせん仕事がないと収入はゼロです。今、無事稼げていたとしても、将来今と同じことをやっていて同じく稼いでいる保証はありません。正直、僕は40歳過ぎても今のテンションで受託制作をやっていける自信はありません。いやもうすでにしんどいし。

    事業のための貯蓄、投資、そして将来的には受託を完全にやめ、経営者として事業を回す、もしくはエネルギッシュな若者に作業を任せられる、知識を与えられるような存在になりたい。あるいは、まったく働かずに生きていきたい

    そのためには、今から事業計画を立て動く必要があります。1年間、生き残るという目標は達成したので、次は一生生き残るために動くですね。




    時間をつくる

    事業を成長させるには、とにもかくにも受託作業以外のことをする時間が必要。かのWebデザイン界の女神(僕が勝手に呼んでるだけですが)ことMana様も、「時間がないは言い訳。時間は作るものです」とおっしゃっていました。

    時間を作る方法はごくシンプルで、

    • 受託の時間を減らし
    • 受託以外の時間を無理やり作る

    これだけです。これからは「受託以外の時間」を、事業への投資と考えます。

    投資と考えることで、決してダラダラ過ごすのではなく、目的をもってきっちりと作業をこなしていく精神になります。投資に時間をつぎ込みすぎると本業が疎かになりますので、時間制限をつける、もしくは1日のうち午前中は投資の時間とするといったことが重要です。

     

    受託以外の時間を減らすというのは、意識して努力しないとなかなか難しいかもしれません。

    • 作業単価を上げる
    • やるべき作業、やらなくていい作業を区別する
    • 仕事の質により、請け負うバランスを考える
    • 自分でスケジュールのコントロールができない案件はなるべく請けない

    といった意識を常に持っておく必要があります。

    この辺りのことについては、以下に紹介する書籍が勉強になりました。

     

    40歳までに受託完全脱却を目指す

    これはもはや僕の個人的な目標となりますが、フリーランスになったのが31歳なので、およそ10年で受託制作作業から脱却し、フリーランスでもキャリアを持って今後の事業を成長させていきたいと思います。

    会社であれば会社のため、そして部下を育てるといった立場になるところですが、フリーランスなので社会のため、そして若き挑戦者のための道標になりたいです。

     

    あと8年、どのように成長していくのか。こうご期待!