Nuxt.js でsanitize(サニタイズ)

Nuxt.jsでv-htmlを使用したら,xss 脆弱性を招くのでご遠慮くださいと怒られました。

 WARN  Compiled with 1 warnings                                                                                                                 
 WARN  ESLintError                                                                                                                                         
/Users/noreen/xxx/microcms-nuxt-jamstack-blog/pages/index.vue
  6:14  warning  'v-html' directive can lead to XSS attack  vue/no-v-html
  8:14  warning  'v-html' directive can lead to XSS attack  vue/no-v-html

というわけでサニタイズします。
apiも自社開発な時などにはそこまで気にしなくてもいいですし、今回はmicroCMSからの値が返ってきていることもわかっている(ユーザからの入力が含まれる可能性はない)のですが、ライブラリがあったので試しにそちらを使おうと思います。

v-html通すまでにxssを防ぐサニタイズ
やり方全部こちらに書いてあります。
v-sanitize

vue公式が出してるのはこちら(Nuxtでは使えないかも…?エラーが消えませんでした。)
## @braintree/sanitize-url

v-sanitizeを使用した手順

インストール

npm install --save v-sanitize

pluginsに追記

グローバルで使えるよう、プラグインに追記します。

plugins/v-sanitize.js

import Vue from 'vue'
import VSanitize from 'v-sanitize'

Vue.use(VSanitize)

nuxt.config.jsに追記

  // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
  plugins: [
    { src: '@/plugins/v-sanitize' },
  ],
  modules: [
    // https://go.nuxtjs.dev/axios
    '@nuxtjs/style-resources',
    [
      'v-sanitize/nuxt',
      {
        /* options */
      },
    ],
  ],
  sanitize: {
    /* options */
  },

コンポーネントで使用

<h2>サニタイズなし</h2>
<div v-html="test"></div>
<h2>サニタイズあり</h2>
<div v-html="$sanitize(test)"></div>
<script>
export default {
  data() {
    return {
      test: `
        <p class="script" style="color: red;"><a onclick=alert("aaa")>alert</a></p>
        <p><img src="http://placekitten.com/200/300"></p>
        <iframe width="350" height="200" src="https://www.youtube.com/embed/SB-qEYVdvXA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
      `,
    }
  },
}
</script>

余談

sanitize-htmlはエラーが消えず断念しました。
Nuxt.jsでsanitize-htmlを使ってみる

エラー
in ./node_modules/sanitize-html/node_modules/htmlparser2/lib/esm/index.js 59:9 Module parse failed: Unexpected token (59:9) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders | return getFeed(parseDOM(feed, options)); | } > export * as DomUtils from “domutils”; | // Old name for DomHandler | export { DomHandler as DefaultHandler };

[Vue.js]続・Viteを導入してみる

以前の記事でvueでviteを導入する方法を書いたのですが、

https://nolyc.net/programming/vuejs-install-vite/(新しいタブで開く)

npm create vite でプロジェクト作成した時はstoreやらrouteやらを自分で入れなければいけないみたいですね。というわけで続編です。`npm create vite@latest`した後の、routerやvuex(store), axiosなどの追加方法を書いています。

# npm 6.x
npm create vite@latest

Vue routerの設定

vue3の場合は、v4をインストール

 npm install vue-router@4

srcディレクトリ下に、routerディレクトリを作成

routerディレクトリ内にindex.jsを作成し、以下を記述。
まず、createRouter、createWebHistoryをインポート。createRouter()で、ルーティング情報を扱うルータの生成ができるようになる。history設定にはcreateWebHistory()を定義する。

参考 
Vue Routerとは
[Vue.js] vue-routerのhashモードとhistoryモードの違いをざっくり理解する

import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'
import Profile from '../views/Profile.vue'

const routes = [
  {
    path: '/',
    name: 'home',
    component: Home,
  },
  {
    path: '/profile',
    name: 'profile',
    component: Profile,
  },
]

const router = createRouter({
  history: createWebHistory(),
  routes,
})

export default router

main.jsに追記

エントリポイントとなるJavaScriptファイルに記述を追加する src/main.js

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import router from './router'

createApp(App).use(router).mount('#app')

# Vue.jsにVue Routerを導入して、タグで画面遷移する方法!
# 今さら聞けない?Vue Router

storeの設定

npm install vuex@next --save

storeディレクトリの作成

src/store/index.jsを作成。

import { createStore } from 'vuex'
export default createStore({
  state: {},
  getters: {},
  mutations: {},
  actions: {},
  modules: {},
})

参考 # Vuexのインストール
注 store > index.jsの中でexport default しているのにmain.jsで { store }としたらだめです
参考 The requested module does not provide an export named in JS

main.jsに追記

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import router from './router'
import store from './store'

createApp(App).use(router, store).mount('#app')

axiosの設定

npm install --save axios vue-axios

main.jsに追記

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import router from './router'
import store from './store'
import axios from 'axios'
import VueAxios from 'vue-axios'

createApp(App).use(router, store, VueAxios, axios).mount('#app')

ほか追加する場合

好みで

Prettier

.prettierrcというファイルをプロジェクトフォルダ直下に作成。
おすすめ設定↓

{
  "semi": false,
  "arrowParens": "always",
  "trailingComma": "es5",
  "singleQuote": true,
  "quoteProps": "preserve",
  "endOfLine": "auto"
}

eslint

npm i&nbsp;eslint-plugin-vue
npm install eslint

プロジェクトファイル直下に設定ファイルを作成

module.exports = {
  root: true,
  env: {
    node: true,
  },
  'extends': ['plugin:vue/vue3-essential', 'eslint:recommended'],
  parserOptions: {
    parser: '@babel/eslint-parser',
  },
  rules: {
    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
  },
}

scssを導入

sass-loaderのv11.0.0以降はwebpackのバージョン5以上しか対応していないようなので、Viteでプロジェクト作成した際はsass-loader v10をインストール
https://zenn.dev/itouuuuuuuuu/articles/284c8420d835ed

npm install --save-dev sass sass-loader@10

参考 https://amg-solution.jp/blog/25614

Viteを利用していない場合は、webpackのバージョン確認の上、該当するsass-loaderを導入しよう。
https://zenn.dev/itouuuuuuuuu/articles/284c8420d835ed

npm list webpack
my-vue-project@0.1.0 /Users/neko/Documents/my-vue-project
├─┬ @vue/cli-plugin-babel@5.0.8
│ ├─┬ babel-loader@8.2.5
│ │ └── webpack@5.74.0 deduped
│ ├─┬ thread-loader@3.0.4
│ │ └── webpack@5.74.0 deduped
│ └── webpack@5.74.0
├─┬ @vue/cli-plugin-eslint@5.0.8
│ ├─┬ eslint-webpack-plugin@3.2.0
│ │ └── webpack@5.74.0 deduped
│ └── webpack@5.74.0 deduped
└─┬ @vue/cli-service@5.0.8
  ├─┬ @soda/friendly-errors-webpack-plugin@1.8.1
  │ └── webpack@5.74.0 deduped
  ├─┬ @vue/vue-loader-v15@npm:vue-loader@15.10.0
  │ └── webpack@5.74.0 deduped
  ├─┬ copy-webpack-plugin@9.1.0
  │ └── webpack@5.74.0 deduped
  ├─┬ css-loader@6.7.1
  │ └── webpack@5.74.0 deduped
  ├─┬ css-minimizer-webpack-plugin@3.4.1
  │ └── webpack@5.74.0 deduped
  ├─┬ html-webpack-plugin@5.5.0
  │ └── webpack@5.74.0 deduped
  ├─┬ mini-css-extract-plugin@2.6.1
  │ └── webpack@5.74.0 deduped
  ├─┬ postcss-loader@6.2.1
  │ └── webpack@5.74.0 deduped
  ├─┬ progress-webpack-plugin@1.0.16
  │ └── webpack@5.74.0 deduped
  ├─┬ terser-webpack-plugin@5.3.6
  │ └── webpack@5.74.0 deduped
  ├─┬ vue-loader@17.0.0
  │ └── webpack@5.74.0 deduped
  ├─┬ webpack-dev-server@4.11.1
  │ ├─┬ webpack-dev-middleware@5.3.3
  │ │ └── webpack@5.74.0 deduped
  │ └── webpack@5.74.0 deduped
  └── webpack@5.74.0 deduped

5以上なら普通にインストールすればOK。
5以下なら、前述の通りsass-loader v10をインストール(npm install –save-dev sass sass-loader@10)。

npm install sass-loader node-sass --save-dev

参考  https://amg-solution.jp/blog/25614

errror ## TypeError: this.getOptions is not a functionが出る場合はバージョンを下げる

npm install sass-loader@10.1.1

scss書く時は<style lang="scss">とすればOK。
諸々追加した後はpackage.jsonで追加されているかを確認できます

{
  "name": "my-recipe-app",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  },
  "dependencies": {
    "vue": "^3.2.41",
    "vue-router": "^4.1.6",
    "vuex": "^4.0.2"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^3.2.0",
    "node-sass": "^7.0.3",
    "sass": "^1.55.0",
    "sass-loader": "^10.3.1",
    "vite": "^3.2.0"
  }
}

ほか参考

Vite

[VSCode]Prettierの自動整形がうまくいかないんですけど!? チートコード

Nuxt.jsを使用したプロジェクトで、ESLint(文法チェックツール)とPrettier(コードの自動整形ツール。コードフォーマッター)を使用しているのですが、上司と画面共有を行いながらコードレビューをしていた際、どうやらPrettierが機能していないことが発覚!(自分で気づかんかい)

今までESLint様のお眼鏡に叶うようちまちまコードを直していたのですが、Prettierさえ動いてくれればそんな手間暇とはオサラバ!!

ということでPrettier機能有効化までの道のりを残しておきたいと思います。

command + ,(Windows: Ctrl + ,)

で設定画面を開き

右上のこのマークをクリック

VSCode setting

VSCodeのsettings.jsonファイルを開きます。

ESLint、Prettier関連の設定も含めたコード全部コピペしました(チートやん)。

{
    "php.executablePath": "/usr/bin/php",
    "php.validate.executablePath": "/usr/bin/php",
    "git.enabled": false,
    "git.path": "/usr/bin/git",
    "workbench.editor.enablePreview": false,
    "workbench.startupEditor": "newUntitledFile",
    "editor.tabCompletion": "on",
    "editor.quickSuggestionsDelay": 500,
    "editor.snippetSuggestions": "top",
    "editor.hover.enabled": false,
    "php-cs-fixer.rules": "@PSR2",
    "php-cs-fixer.formatHtml": true,
    "php-cs-fixer.executablePath": "/usr/local/bin/php-cs-fixer",
    "editor.minimap.enabled": false,
    "editor.insertSpaces": false,
    "editor.detectIndentation": false,
    "terminal.integrated.rendererType": "dom",
    "C_Cpp.updateChannel": "Insiders",
    "editor.acceptSuggestionOnEnter": "smart",
    "php-cs-fixer.onsave": true,
    "[javascript]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "editor.formatOnPaste": true,
    /*
    "[vue]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    */
    "eslint.options": {
        "configFile": "./.eslintrc.js"
    },
    "editor.formatOnSave": false,
    // vueはfalse
    /*
    "[vue]": {
        "editor.formatOnSave": false,
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    */
    "editor.codeActionsOnSaveTimeout": 3000,
    "editor.codeActionsOnSave": {
        "source.fixAll.eslint": true,
        "source.fixAll.tslint": true,
        "source.fixAll": true
    },
    // "eslint.autoFixOnSave": true,
    /*
    "files.associations": {
        "*.vue": "vue"
    },
    */
    "eslint.validate": [
        "javascript",
        "javascriptreact",
        "typescript",
        "typescriptreact",
        "vue",
        /*
        {
            "language": "vue",
            "autoFix": true
        }
        */
    ],
    "javascript.updateImportsOnFileMove.enabled": "always",
    "explorer.confirmDragAndDrop": false,
    "liveSassCompile.settings.generateMap": false,
    "terminal.integrated.copyOnSelection": true,
    "terminal.integrated.rightClickBehavior": "paste",
    "nativescript.analytics.enabled": false,
    "vscode-php-cs-fixer.toolPath": "/usr/local/bin/php-cs-fixer",
    "yaml.format.enable": true,
    "yaml.completion": true,
    "yaml.validate": true,
}
 

後から個別に調べるから今は許して…

個人ブログだから…

(懺悔)

アメリカに住むなら必須!? 個人向け監視カメラ

どうも、お世話になっております。

ここ最近アパートメントにゴキブリが出るようになり、業者の出入りをきっかけに監視カメラのことを思い出しました。

アメリカ(CA)と日本窃盗犯罪の数値を比較

カリフォルニアでの犯罪率は歴史的に見れば下がっているものの、依然としてその数値が高いことは否定できません。PUBLIC POLICY INSTITUTE of CALIFORNIAによれば、2017年の窃盗犯罪(property crime)は1.5%上昇したものの、これは1980年代のひどさに比べればマシなようです。 住人10万人あたりで451件の被害があります。

所変わって日本では、いわゆる「泥棒」は刑法犯における「窃盗犯」の中の「侵入盗」 にあたりますが、ここではproperty crimeの数値と比較するために窃盗犯に絞って数値を比較してみましょう。警視庁の平成30年警察白書 統計資料によれば、全国での窃盗犯の認知件数は65万5498件。うち検挙されたのは20万4296件です。総務省統計局によると、2019年9月時点での日本の人口は現在1億2615万人。

人口をざっくり1億2600万人として、

窃盗犯の認知件数もこれまたざっくり65万件とすると、

65万人/12600万人*10万人=0.0515873

10万人あたりの窃盗犯罪は約5件

…で、合ってますか?数字弱いんですけど…間違いご指摘いただけたら全力で喜びます…。

何が言いたいかというと、カリフォルニアではそれほど窃盗が多いということなんですね。おん、やはり日本は平和であった。

アメリカのアパートに住むなら監視カメラは必須!

それはそうと我々は今年、Palo Altoという治安の良いところから、少し治安は悪そうだけれどもアジアンマーケットなどがたくさんあり楽しい街Mountain Viewという所に引っ越しました。

越してきたアパートは広くて快適なのですが、いかんせん治安なども含めていろいろ気になるところ。同じアパートのみなさんはいい人たちだと思いたいですが、この辺りはヒスパニック系の低所得者も多く、統計的にもそうした地域は窃盗が多いという事実は否めません。

窓のカーテンは出かける際、金目のものが見えないように閉めておくのはもちろんのこと、かつアパートメントではたまに業者が家主のいない時に入ってきたりするので(もちろん事前に通知はきます)、お互い気持ちよくコミュニケーションするためにも、監視カメラの設置をおすすめします。

というのも、ここ最近アパートにゴキブリが出るようになり、ゴキ退治のために家主不在時に業者が何度か出入りしていたんですよね。というのが冒頭の件です。またそれ以前に水道に問題が出た時も、日中に対応してもらっていました。

こういうのはアパートメント居住ならではの心配事かなと思い、特にアパートメントに住む方やルームメイトがいる方はパーソナルなスペースに監視カメラの設置をおすすめします。

Wyze Camは欲しい機能がぎゅっと詰まった安価な監視カメラ!

とはいえ、監視カメラなんてお高いんでしょ…?というそこのあなた、まあまあ見てってくださいよ聞いてくださいよ。

我らが購入したのはWyze Camという、クラウドソーシングで一時期話題を集めた商品。これがね、すごいんですよ!便利!何より安い!

なんとお値段$19.99から。自宅に設置し、アプリで管理できます。外出時に監視カメラのモードにすることで、人がいない状況で家の中での「何か」の動きを検知・通知してくれるというスグレモノ。アレクサやGoogleアシスタントとの連携も可能です。

こちらの商品、皆様のアンケートを元に欲しい機能をぎゅっと詰め込んだものらしく、このお値段でここまで!?という機能が盛りだくさん。加えて、夜でもこの解像度!届いたばかりの時は2人で遊んでました。笑

人らしきものを検知していますね…

機能一覧

気になるWyze Camの機能は下記の通り。(意訳です)

カラー
加工 マット
サイズ
  • 高さ: 2.20″ (56mm)
  • 幅: 1.97″ (50mm)
  • 深さ: 1.97″ (50mm)
重さ 3.53 oz (100g)

こんなもんでしょうか。

難点は、監視カメラの検知レベルが高すぎて小さすぎる音や動きでもすぐに録画・通知してきてしまう点。この検知レベルは調整できるのですが、それでもなお通知が多いな…と思うレベルです。一度確認してみて気にしなければいいだけなんですけどね。

あとマイクもついているので、たまに私が部屋で仕事中に彼が話しかけてきたりしてビビります。部屋で恥ずかしいことできなくなりました。

 

アメリカ(最安?)のお引越し手順 – 物件探し編 

どうも、お世話になっております。

そう言えば1カ月くらい前に彼が2年くらい住んだ家を引っ越しました。日本でさえまともな1人暮らしをしたことがない私ですが、引っ越しのフローを見ていていろいろ勉強になることがあったので備忘録的にまとめておきます。

物件探し〜契約

そもそもアメリカの物件探しはどのように進めるのでしょうか。アメリカのメディアRealEstateRamaによれば、サイトで空き家を確認した人の数をベースにデータを取ると、アパート探しには下記のサイトがトップ10に上るとのこと。

  1. Rent.com
  2. 4walls.net
  3. ForRent.com
  4. ApartmentGuide.com
  5. Apartments.com
  6. ApartmentShowcase.com
  7. ApartmentHomeLiving.com
  8. Move.com
  9. MyNewPlace.com
  10. ApartmentSearch.com

しかし、私の彼はこのどれも使っていませんでした。というのも、どのサイトも仲介料を払う必要があり、探すのに手間がかかるのだとか。その他の要因としては、慣れの問題もあると思います。ではどのサイトを使って探したのかと言うと…

1. 物件探し

アメリカの物件を安く簡単に探そうと思ったらこちらです。天下のcraigslist(クレイグスリスト)。

https://www.craigslist.org/about/sites

こちら物件に限らず、モノ、人、サービス、お探しのもの何でも(何でも?)見つけられます。お探しもののギブアンドテイクサイトとでも言いましょうか。メルカリをだいぶラフにしたようなものですね。

中には街かどで見かけただけの人に(相手も同じ気持ちであることを願いつつ)連絡を取る手段として使っている人もいます。「サンフランシスコのXX(お店の名前)でYY時頃にバーカウンターで目が合ったヒスパニックの女性へ…」といった具合に。

さて、それはさておきcraigslistの物件探しです。

craigslistの情報はナマモノ。昨日は無かった物件も今日には出ている可能性がありますし、逆も然り。引っ越しをすることが決まったら、まるでAppleの検品済み製品を探すかのごとく、毎日毎日毎日毎日希望のエリアの物件をチェックするのが肝です。

希望の立地と予算に応じた物件が見つかったら…

2. オーナーにコンタクト

craigslistに掲載されている写真は限定的なものばかりですし、実際に行ってみないと物件やその周辺の様子はよくわかりません。内見をさせてもらうためにも、オーナーにコンタクトを取りましょう。

craigslistの物件にはscam(スカム)と言って、食わせ物件が存在します。連絡したら何だかんだ理由をつけて前金を払わせトンズラ、というやつですね。無料だからこそ現れる邪悪な奴らですが、対策方法はあります。
対策:もしあなたが現地にいるなら、一度オーナーと会っておくのが吉、です。scamでは事前に会いたい旨を伝えると、10割がた会えない理由を述べてくるとのこと(別れ際の彼氏かよ)。

彼が言うには、scamをするような奴は大体英語の文法もちょっとおかしくて何となくわかるとのこと。しかしそんなもん英語ネイティブじゃないとわかりません。ということでscamが不安な人や条件の良すぎる物件を見つけた人は、面倒でも一度オーナーに会っておくことをお勧めします。

オーナーにコンタクトを取り、内覧の手はずを整えましたか?さすればもちろん次は…

3. 内覧

内覧は、オーナーに声をかけて開けてもらう物件もあれば、ドアが空いていて勝手に入って行けるようなアパートもあります。私たちが内覧している時も、他のカップルなんかが入ってきて一緒に内覧していました。W内覧なんてあたい初めて。

ちなみに気に入った物件を取り置きするにはデポジットが必要です。例えば、気になる物件が2つあり、もう一つの物件は来週にしか内覧できない…けどこの物件が捨てがたい!という時ですね。

デポジット料金は物件にもよりますが大体$500くらいです。これはオーナーが機会損失をしないための保険なので、何日かは待ってくれますが、あまりにも決めるのが遅い場合には何パーセントか取られるはず。最終的にデポジットを払った物件に移ることが決まった場合、このデポジットは来月の家賃にまわされます。

さて、デポジットを払えば物件の取り置きは可能ですが、基本的に物件探しは早い者勝ちです。

…と、思いきや、全てのアパートメントが早い者勝ちではないそう。8割くらいは早い者勝ちですが、一部の物件はオーナーの好みによって当選者が決まることも。そんなことってある?まあ、物件を貸すのはオーナーなのでオーナーの自由にするのは筋が通っているんでしょうけど…。

確かに私がオーナーだったら家賃滞納履歴がある人には物件を貸し渋ってしまうような気もするので、一概に否定はできませんね。

さて、内覧をした物件は気に入りましたか?それではいよいよ…

4. 契約

物件が気に入ったらいよいよ契約です。オーナーに連絡をつけるか、内覧の際に即決でもOKです。入居したい旨を伝え、契約書の手はずを整えます。

こちらの契約書、もちろんですが物件によって条件は様々。ペット禁止、プールやランドリーの時間制限(私たちが今いる物件holding depositは朝7時〜夜8時まで)、騒音に関する注意事項、などなど。後々のトラブルを避けるためにも、根気よく全部確認しましょう。

入居時に必要な料金として、基本的にはデポジット(約1カ月分の家賃料)+1カ月分の家賃が必要です。死!

最近はオンラインでの支払いが殆どですが、古い形式を取っているようなところでは小切手を利用します(今回の私たちがそうでした)。小切手なんてきょうび見ないのでびびびびびっくりしました。キャッシュレス社会アメリカなのにそこは小切手なんかい!と思いますが、こうした物件はもはや少ないみたいなのでご安心ください。

ちなみに、小切手には2種類あります。

  • check
  • cashier’s check

普通のcheckは、ただの小切手。支払い者の口座に額面以上のお金があることが前提となります。そのため、例えば$1しか貯金がないのに小切手に$500と書いてオーナーに渡したとしましょう。すると、$500の小切手を持って銀行を訪れたオーナーは銀行に「この口座、お金入ってないので支払えませんね」と言われることになり、お金を受け取れません。つまり、いくら小切手をもらおうが、その小切手には支払いの保証が無いのです。

一方cashier’s checkは、保証のある小切手。小切手の支払い者はまず銀行に行って、額面の金額を支払う必要があります。そのためcashiers checkを受け取った人は、支払い者が支払い能力のある人物であることを事前に確認できるというわけです。

また、cashier’s checkにはもう1つメリットがあります。それは、小切手を紛失したときにキャンセルできるという点です。例えば、支払い者やオーナーのどちらかが小切手を無くしてしまったとしましょう。その際、支払い者が銀行にcashier’s checkの支払いをキャンセルしさえすれば、すでに発行していた小切手は無効になるため、どこぞの馬の骨とも知れない輩にお金を引き出されれてしまうのを防ぐことができるのです。

と言う訳で、今回は事前に銀行で支払いを済ませるcashier’s checkを利用し、契約を済ませました。そもそもなぜ現金でなく小切手を使うのかということに関して言うと、小切手はコピー可能な領収書にもなり得るため、契約などのシーンには極めて便利なのです。

いきなりですがみなさん、price controlという制度をご存知でしょうか。ご存知でしたか。そうですか。
念のため説明しておくと、price controlとは政府が取り決めた物価の上限と下限を守る法律のことです。アパートなどにはrent controlという言葉が使われます。物件を持つオーナーは家賃を引き上げて良いのですが、rent control下にある物件は年に1度、ある一定の比率でしか上げてはいけないことになっています。借りる物件がrent control下にないと、思わぬ家賃の上昇に見舞われる可能性もありますので、契約前にはその旨確認しておいた方が安心です。地域ごとの規定についてはこちらを参照しました。

まとめ

ひとまず物件探しから契約までをまとめてみました。

思った以上に長くなってしまったので、引っ越しから先の手続きについてはまた別の記事でまとめたいと思います。

何か追加してほしい事項があればその旨コメントいただけますと幸いです。

あなたにも良い引っ越し先が見つかることを願っています!

海外でも働きたいノマド勢はVPNが最高に便利

お疲れ様です、大川です。

 

約2年ぶりにセブに来てすごいテンション上がっちゃって酔っ払ってベロベロになりながらタクシーで帰ったら運ちゃんにiPhone7とGoPro Hero7とAirPodsを同時に盗まれた大川が通ります。

酒は飲んでも飲まれるな!

それはさておき、セブで仕事しててさっき気づいたことがあったんでサクッと投稿しておきますね。


セブでWordPress使おうとしたらVPNが便利だった

security camera

そもそもVPNって何さ

今回の内容はタイトルの通りなんですが、普段日本で仕事してて、たまに海外で仕事する可能性のある人はVPN契約しておくと便利です。「VPNって何さ?」ですよね。解説します。VPNとは、Virtual Private Networkの略で、仮想のプライベートネットワークのことです。

 

まあそう言われたところでナンノコッチャだと思うんですけど。例えばスタバのWi-fiなんかを使う時、みんな同じパスワードで同じ回線に繋いでると思うんですよ。これって結構リスキーで、通信内容なんかを盗み見されやすいんですね。

 

大学の課題とかやってる分にはいいかもしれないですけど、もしかして無料のWi-fi使ってる時に仕事で顧客の情報を扱っていたり、カード情報を入力したりしてませんか?それ、盗み見されている可能性もありますよ。

 

VPNはその名の通り、仮想のプライベートネットワークに繋ぐことができるため、いわば利用しているネットワークから直にではなく、ワンクッション入れてアクセスができるんです。よって情報を盗み見されにくい。

 

こちらのサイトさんはすごく詳しく書いてくださってるので、VPNについてもっと深く知りたい方は自分で調べたり、読んでみてください。

https://japan.norton.com/vpn-8553

 

ただ、日本で仕事してる人もVPNは契約しておくに越したことはないのですが、ちょっとVPNの大切さって実感が湧きにくいんですよね。だって自分の情報が盗み見されることって基本的には無いですし、それによる被害に会った人なんて周りにいないし。

 

実際は何かあった後じゃ遅いですし、「備えあれば憂いなし」なんで、迷うなら契約しておくことをオススメします。でも、今回のVPNのセールスポイントは実はそこじゃないんですね。前置き長いっすね。させん。


WordPress利用者にはVPNが海外で便利!

最近のサーバーって優秀だから、WordPressの管理画面なんかに対し、いきなり海外からのアクセスがあるとブロックされちゃうんですね。

こんな感じ

server block
優秀!

これ自体はサーバーの設定から、海外からのアクセスを許可する設定にすればいいんですけど、じゃあ今現在自分がフィリピンにいて、情報を見られる可能性があるのに海外からのアクセス全部許可したいか?って言われるとそうでもないんですよね。

 

日本よりそういうリスクが高い(ような気がする)し。なんせフィリピンはもう外に出れば7人の敵がいるみたいな環境なもんですから…(非科学的)。

 

まあそんな訳で、こういう時にVPNで日本に接続すれば、例えフィリピンにいてもあたかも日本からの接続であるかのように目的のサイトへアクセスできるのが便利なんですね。

 

ちなみにiPhone無くした時も「iPhoneを探す」を利用しようとしたらなぜかアクセスできなくて、VPNで日本に接続したらiPhoneを探すが利用できました。何でだろう。とにかく、案外利用シーンはあるってこと。

 

例えばiPhone盗まれたみたいな切羽詰まった時にVPNでサクッと解決できるとまじでストレスフリーだなとは今回の件で実感しました。にしても授業料高すぎだけど!!??(白目)

 

メリットは上記の通りです。デメリットとしては、まあ普通に費用がかかるなっていうこととVPNを過信しちゃだめだよ、ってことくらいですね。あと速度が若干落ちるってとこかな。あんまり気にならないですけど。

 

こちらのNordVPNは軍事レベルのセキュリティを維持しつつも、2年契約で月あたりのお値段が約3ドルなのがオヌヌメです。海外で仕事する勢は契約しておきましょ。結構便利よ。



あなたが恋人とハロン湾のクルージングに行くべき理由

どうもこんにちは、スナフキンです。

 

前回の旅行から早半年。

そろそろ旅行に行かないとじんましん出ちゃうんじゃないかな?と思い、今度は初めて東南アジア「ベトナム」へ旅行してきました。

 

いやーいいですね、ベトナム!

そして中でもおすすめはハロン湾でした。

ちょっとタイトルにもある通り、このハロン湾のクルージングはごくごく控えめに言っても本当に最高だったのでちょっと言わせてください。

 

最高でした!!!!!!

 

さて、そもそもなぜハロン湾に行こうと思ったのかと言うと、実は前職の営業先の人がたまたまベトナムで何年かご勤務経験がある方で、私がベトナムに行くと行ったらベトナムのいいところをいくつかプレゼンしてくれたんですね。

で、その一つがここ、ハロン湾だったわけです。



ハロン湾クルージングのおすすめポイント

私今回の記事はぜひともハネムーンを控えてらっしゃるアベックにおすすめしたい。

ハネムーンを控えているけども、かつ予算があまりなくて、海外旅行とかあんまり行ったことなくて、でもハネムーンだし海外で贅沢したい!みたいな人にはもっとおすすめしたい。

 

これ実際、今度結婚する私の友だちにもおすすめしたんですけど、特にここ!って具体的に行きたい所が無くて、でも海外旅行楽しみたいな〜って人はベトナムって超穴場なんです。

まず、

飯がうまい

ベトナム料理を食べたことはありますか?

 

代表的なところでフォーなどが挙げられますが、ベトナムでは鶏や牛のスープを使ったライスヌードルや野菜料理が充実しており、これが本当に美味しいんです!

 

ごはんが美味しいっていうのは旅行で結構重要な要素じゃないですか?

左利きなのかな

 

ベトナム料理には他にも、ライスペーパーでお肉や野菜を包んだ料理や米粉のクレープなど、日本と同じ米文化ですが、アレンジのバラエティが豊か。

 

そして土壌が豊かなのか、野菜はみずみずしく、かといってタイ料理ほど味が濃くないので食べていても飽きが来ません。

 

東南アジアの料理と言うとパクチーのイメージが強いですが、ハーブ類で言うと、どちらかと言えばバジルを料理にぶっこむことが多かったですね。

生春巻きにはパクチーもりもりでしたけど!

 

そして

ベトナムはもともとフランスの植民地下だったので、フランスの食文化も色濃く残っているんです。

それは首都のあるホーチミンでもそうなんですけど、体感的には北の主要都市、ハノイの方が強い感じがしました。

 

ベトナムを代表する料理、Bánh mì(バンミー)はベトナム×フランスの代表料理!

本格的なフレンチも、多分世界中のどこよりもお手軽に食べられるんじゃないでしょうか。

ハノイでもいくつかのお店を回りましたが、味良し、サービス良しでした。

もちろん、クルージングではベトナム料理も、ちょっとベトナムナイズされたベトナムフレンチも楽しめます。なかなかのお味でしたよ!

 

はい、続いてのおすすめポイントは

日本から近い

これが、予算にあまり余裕が無い人たちにおすすめする理由です。

飛行機代、いかにLCCが増えたと言えど、やっぱりバカにならないですよね。

旅行代理店の提示する金額だと燃油サーチャージが入ってなかったりするんでまじで恐ろしいですよ。何考えてんだか。

 

クルージングしよう!ってなった時に新婚旅行で候補に上がるのって地中海かなーと思うんですけど、地中海って季節を選びますし、またヨーロッパなので物価がそんなに安く無いんですよね。

ってことはですよ?

せっかくクルージング乗っても、ドリンク代がやけに高かったりしてちょっとヒヤヒヤハラハラしちゃったりするわけじゃないですか。

 

価値観は人それぞれなので私の意見を押し付けるわけではありませんが、少なくとも私は旅先でケチケチしてたくないので、中途半端にお金がないとか、だったらヨーロッパよりもアジアで豪遊した方が楽しめる気がします。

(愛する人と行けばどこだって楽しいとは思うけどね)

 

一般的に慣れてない人でツアーを予約するなら(燃油サーチャージ込だったとして)プラス20万は余計に見積もっといた方がいいですよ。

治安が良い

これ何でかよくわからないんですけど、ベトナムは少なくともホーチミンとハノイに関しては全然治安の悪い感じがしませんでした。

 

とはいえ海外なので、夜の一人歩きや危なそうな場所(貧民街)などには近寄らないべきですが、ベトナムではフィリピンみたいなストリートチルドレンを全然見ませんでしたし、またインドのように人を騙してお金を取ってくるみたいな悪質な客引きにも出会わなかったです。国民性かな?

 

たまたま運が良かったと言われればそれまでですが…

私は結構いろんな国行ってて日本人に相性がよく、こんなに治安のいい国ってあんまり無い気がしますよ。

 

そのためクルージングまでの道中も安心して移動ができました。

ハロン湾の基礎知識
Ha Long Bay

そんなわけでハロン湾のクルージングについて長々とオススメしてきたのですが、そもそもハロン湾って何よ?って話だと思うのでここらで説明させてください。

概要

ハロン湾はベトナムの主要都市であるハノイから東へまっすぐ進んだ沿岸地帯のことで、切り立った大きな岩がそこかしこにあることから、昔は敵の侵入を防ぐ場所として機能していたようです。

現在はもっぱらクルージングツアーのメッカとして機能しているようで、私たちが利用した船以外にも、たくさんのクルージングがハロン湾に停泊していました。

https://goo.gl/maps/9oUwqy3RUnQ2

ハロン湾への行き方

ハノイからハロン湾へは車と船を使っていきます。

大抵、ハロン湾のクルージングを予約するとハロン湾行きのバンがハノイまで迎えに来てくれ、約2時間ほどでハロン湾の港に到着します。

 

港の近くで他の参加者を待ち、全員が揃ったら小さい船でクルーザーまで乗り付ける、といった具合です。

小さい船の船内

 

と、ここまで書いた所で時間切れなので、次回以降は実際に私たちが利用したクルージングの会社プランを誰に頼まれているでもなく追体験という形でご紹介したいと思います。